#include "SymTable.hpp" namespace jk { /*explicit*/ SymTable::SymTable(Logger& logger) : m_logger { logger } { } /*virtual*/ SymTable::~SymTable() { } size_t SymTable::declare(std::string const& name, std::shared_ptr type, Loc const& loc) { if (find(name)) { m_logger.log(LOG_ERROR, loc, std::string() + "'" + name + "' is already defined"); } size_t id = m_syms.size(); m_syms.push_back(Sym { name, type, loc, false, id }); return id; } size_t SymTable::declare_global(std::string const& name, std::shared_ptr type, Loc const& loc) { size_t addr = declare(name, type, loc); m_syms[addr].is_global = true; return addr; } std::optional SymTable::find(std::string const& name) const { for (auto const& sym: m_syms) { if (sym.name == name) { return sym; } } return std::nullopt; } }