![]() |
P4C
The P4 Compiler
|
Assists visitors in traversing the IR. More...
Public Member Functions | |
| bool | busy (const IR::Node *n) const |
| bool | done (const IR::Node *n) const |
| void | finish (const IR::Node *n) |
| void | revisit_visited () |
| bool | shouldVisitOnce (const IR::Node *n) const |
| VisitStatus | try_start (const IR::Node *n, bool defaultVisitOnce) |
| void | visitAgain (const IR::Node *n) |
| void | visitOnce (const IR::Node *n) |
Assists visitors in traversing the IR.
A Tracker object assists visitors traversing the IR by tracking each node. The start method begins tracking, and finish ends it. The done method determines whether the node has been visited.
|
inlinenodiscard |
Determine whether
is currently being visited and the visitor has not finished That is, start(@n) has been invoked, and finish(@n) has not,
|
inlinenodiscard |
Determine whether
has been visited and the visitor has finished and we don't want to visit
again the next time we see it. That is, start(@n) has been invoked, followed by finish(@n), and the visitOnce field is true.
|
inline |
Mark the process of visiting
as finished, with @final being the final state of the node, or nullptr if the node was removed from the tree. done(@n) will return true, and result(@n) will return the resulting node, if any.
If @final is a new node, that node is marked as finished as well, as if start(@final); finish(@final); were invoked.
| Util::CompilerBug | This method fails if `start( )` has not previously been invoked. |
|
inline |
Forget nodes that have already been visited, allowing them to be visited again.
|
inline |
Return a visitOnce flag for node
|
inlinenodiscard |
Begin tracking
during a visiting pass. Use finish(@n) to mark
as visited once the pass completes.
VisitStatus::Busy), or if node was already visited (VisitStatus::Done), node was never seen before (VisitStatus::New) or seen, but should be revisited (VisitStatus::Revisit).