11#ifndef ARK_COMPILER_NAMERESOLUTION_STATICSCOPE_HPP
12#define ARK_COMPILER_NAMERESOLUTION_STATICSCOPE_HPP
19#include <unordered_set>
36struct std::hash<
Ark::internal::Declaration>
40 return std::hash<std::string> {}(x.original_name);
63 virtual std::string add(
const std::string& name,
bool is_mutable);
71 [[nodiscard]]
virtual std::optional<Declaration> get(
const std::string& name,
bool extensive_lookup);
78 [[nodiscard]]
virtual std::string fullyQualifiedName(
const std::string& name)
const;
86 virtual bool saveNamespace(std::unique_ptr<StaticScope>&);
88 [[nodiscard]]
virtual bool isNamespace()
const;
89 [[nodiscard]]
inline virtual bool withPrefix()
const {
return false; }
90 [[nodiscard]]
inline virtual bool isGlob()
const {
return false; }
91 [[nodiscard]]
inline virtual std::string
prefix()
const {
return ""; }
92 [[nodiscard]]
inline virtual bool hasSymbol(
const std::string&)
const {
return false; }
96 std::unordered_set<Declaration> m_vars {};
102 NamespaceScope(std::string name,
bool with_prefix,
bool is_glob,
const std::vector<std::string>& symbols);
114 std::string add(
const std::string& name,
bool is_mutable)
override;
122 [[nodiscard]] std::optional<Declaration> get(
const std::string& name,
bool extensive_lookup)
override;
129 [[nodiscard]] std::string fullyQualifiedName(
const std::string& name)
const override;
137 bool saveNamespace(std::unique_ptr<StaticScope>&)
override;
139 [[nodiscard]]
bool isNamespace()
const override;
140 [[nodiscard]]
inline bool withPrefix()
const override {
return m_with_prefix; }
141 [[nodiscard]]
inline bool isGlob()
const override {
return m_is_glob; }
142 [[nodiscard]]
inline std::string
prefix()
const override {
return m_namespace; }
143 [[nodiscard]]
inline bool hasSymbol(
const std::string& symbol)
const override {
return std::ranges::find(m_symbols, symbol) != m_symbols.end(); }
144 [[nodiscard]]
bool recursiveHasSymbol(
const std::string& symbol)
override;
151 std::unordered_set<Declaration> m_vars {};
bool isGlob() const override
bool hasSymbol(const std::string &symbol) const override
NamespaceScope(const NamespaceScope &)=delete
NamespaceScope & operator=(const NamespaceScope &)=delete
bool withPrefix() const override
NamespaceScope(NamespaceScope &&)=default
std::string prefix() const override
std::vector< std::string > m_symbols
NamespaceScope & operator=(NamespaceScope &&)=default
std::vector< std::unique_ptr< StaticScope > > m_additional_namespaces
virtual bool withPrefix() const
StaticScope(const StaticScope &)=delete
virtual bool recursiveHasSymbol(const std::string &)
StaticScope & operator=(const StaticScope &)=delete
virtual std::string prefix() const
virtual bool hasSymbol(const std::string &) const
StaticScope(StaticScope &&)=default
StaticScope & operator=(StaticScope &&)=default
virtual ~StaticScope()=default
virtual bool isGlob() const
std::string name
End name, can be modified to be hidden.
std::string original_name
Original name, with the prefix, without hidden namespaces.
bool operator==(const Declaration &other) const =default
size_t operator()(const Ark::internal::Declaration &x) const noexcept