7#ifndef BACKENDS_P4TOOLS_COMMON_LIB_NAMESPACE_CONTEXT_H_
8#define BACKENDS_P4TOOLS_COMMON_LIB_NAMESPACE_CONTEXT_H_
13#include "ir/declaration.h"
15#include "lib/cstring.h"
20class NamespaceContext {
22 const IR::INamespace *curNamespace;
23 const NamespaceContext *outer;
26 mutable std::optional<std::set<cstring>> usedNames;
28 NamespaceContext(
const IR::INamespace *ns,
const NamespaceContext *outer)
29 : curNamespace(ns), outer(outer) {}
34 const IR::IDeclaration *findNestedDecl(
const IR::INestedNamespace *nestedNameSpace,
35 const IR::Path *path)
const;
39 static const NamespaceContext *
Empty;
43 const NamespaceContext *
push(
const IR::INamespace *ns)
const;
46 const NamespaceContext *
pop()
const;
The Declaration interface, representing objects with names.
Definition declaration.h:17
const IR::IDeclaration * findDecl(const IR::Path *path) const
Looks up a declaration in this context. A BUG occurs if the declaration cannot be found.
Definition namespace_context.cpp:62
const NamespaceContext * push(const IR::INamespace *ns) const
Definition namespace_context.cpp:18
const NamespaceContext * pop() const
Definition namespace_context.cpp:22
const std::set< cstring > & getUsedNames() const
Definition namespace_context.cpp:98
static const NamespaceContext * Empty
Represents the empty namespace context.
Definition namespace_context.h:39