]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/rust/checks/errors/privacy/rust-privacy-ctx.h
Update copyright years.
[thirdparty/gcc.git] / gcc / rust / checks / errors / privacy / rust-privacy-ctx.h
CommitLineData
83ffe9cd 1// Copyright (C) 2020-2023 Free Software Foundation, Inc.
ca246e57
AC
2
3// This file is part of GCC.
4
5// GCC is free software; you can redistribute it and/or modify it under
6// the terms of the GNU General Public License as published by the Free
7// Software Foundation; either version 3, or (at your option) any later
8// version.
9
10// GCC is distributed in the hope that it will be useful, but WITHOUT ANY
11// WARRANTY; without even the implied warranty of MERCHANTABILITY or
12// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
13// for more details.
14
15// You should have received a copy of the GNU General Public License
16// along with GCC; see the file COPYING3. If not see
17// <http://www.gnu.org/licenses/>.
18
19#ifndef RUST_PRIVACY_CTX_H
20#define RUST_PRIVACY_CTX_H
21
22#include "rust-hir-map.h"
23#include "rust-privacy-check.h"
24
25namespace Rust {
26namespace Privacy {
27
28/**
29 * Reachability levels of HIR nodes. These levels are computed through the
30 * `ReachabilityVisitor` visitor.
31 */
32enum ReachLevel
33{
34 Unreachable,
35 Reachable,
36};
37
38class PrivacyContext
39{
40public:
41 /**
42 * Insert a new resolved visibility for a given node. If the node is already
43 * present in the reachability map, then its visibility will only be updated
44 * if the given visibility is higher.
45 *
46 * @param mappings Mappings of the node to store the reach level for
47 * @param reach Level of reachability for the given node
48 *
49 * @return The new reachability level for this node. If this was the first
50 * time inserting this node, then return `reach`. Otherwise, return `reach` or
51 * the existing reach level if it was higher.
52 */
53 ReachLevel update_reachability (const Analysis::NodeMapping &mapping,
54 ReachLevel reach);
55
56 /**
57 * Lookup the visibility of an already declared Node
58 *
59 * @param mapping Mappings of the node to fetch the reach level of
60 *
61 * @return `nullptr` if the reach level for the current node has not been
62 * added, a valid pointer otherwise
63 */
64 const ReachLevel *lookup_reachability (const Analysis::NodeMapping &mapping);
65
66private:
67 std::unordered_map<DefId, ReachLevel> reachability_map;
68};
69} // namespace Privacy
70} // namespace Rust
71
72#if CHECKING_P
73namespace selftest {
74void
75rust_privacy_ctx_test (void);
76}
77#endif // !CHECKING_P
78
79#endif // !RUST_PRIVACY_CTX_H