P4C
The P4 Compiler
Loading...
Searching...
No Matches
namespace_context.h
1/*
2 * SPDX-FileCopyrightText: 2023 The P4 Language Consortium
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7#ifndef BACKENDS_P4TOOLS_COMMON_LIB_NAMESPACE_CONTEXT_H_
8#define BACKENDS_P4TOOLS_COMMON_LIB_NAMESPACE_CONTEXT_H_
9
10#include <optional>
11#include <set>
12
13#include "ir/declaration.h"
14#include "ir/ir.h"
15#include "lib/cstring.h"
16
17namespace P4::P4Tools {
18
20class NamespaceContext {
21 private:
22 const IR::INamespace *curNamespace;
23 const NamespaceContext *outer;
24
26 mutable std::optional<std::set<cstring>> usedNames;
27
28 NamespaceContext(const IR::INamespace *ns, const NamespaceContext *outer)
29 : curNamespace(ns), outer(outer) {}
30
34 const IR::IDeclaration *findNestedDecl(const IR::INestedNamespace *nestedNameSpace,
35 const IR::Path *path) const;
36
37 public:
39 static const NamespaceContext *Empty;
40
43 const NamespaceContext *push(const IR::INamespace *ns) const;
44
46 const NamespaceContext *pop() const;
47
49 const IR::IDeclaration *findDecl(const IR::Path *path) const;
50
52 const std::set<cstring> &getUsedNames() const;
53
56 cstring genName(cstring name, char sep) const;
57};
58
59} // namespace P4::P4Tools
60
61#endif /* BACKENDS_P4TOOLS_COMMON_LIB_NAMESPACE_CONTEXT_H_ */
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
Definition cstring.h:85
Definition common/compiler/compiler_result.cpp:7