pub struct Plan<'a> { /* private fields */ }
Expand description
“Definitions-before-uses” / “topo-sorted” printing plan.
In order to represent parts of a DAG textually, it first needs to have its
nodes “flattened” into an order (also known as “topo(logical) sorting”),
which Plan
wholly records, before any printing can commence.
Additionally, nodes without a significant identity (i.e. interned ones) may have their separate definition omitted in some cases where printing them inline at their use site(s) is preferred (e.g. when they have a single use).
Once a Plan
contains everything that needs to be printed, calling the
.pretty_print()
method will print all of the nodes
in the Plan
, and its return value can be e.g. formatted with fmt::Display
.
Implementations§
source§impl<'a> Plan<'a>
impl<'a> Plan<'a>
sourcepub fn for_root(
cx: &'a Context,
root: &'a (impl Visit + Print<Output = Fragment>)
) -> Self
pub fn for_root( cx: &'a Context, root: &'a (impl Visit + Print<Output = Fragment>) ) -> Self
Create a Plan
with all of root
’s dependencies, followed by root
itself.
sourcepub fn for_module(module: &'a Module) -> Self
pub fn for_module(module: &'a Module) -> Self
Create a Plan
with all of module
’s contents.
Shorthand for Plan::for_root(module.cx_ref(), module)
.
sourcepub fn for_versions(
cx: &'a Context,
versions: impl IntoIterator<Item = (impl Into<String>, &'a (impl Visit + Print<Output = Fragment> + 'a))>
) -> Self
pub fn for_versions( cx: &'a Context, versions: impl IntoIterator<Item = (impl Into<String>, &'a (impl Visit + Print<Output = Fragment> + 'a))> ) -> Self
Create a Plan
that combines Plan::for_root
from each version.
Each version also has a string, which should contain a descriptive name (e.g. the name of a pass that produced that version).
While the roots (and their dependencies) can be entirely unrelated, the
output won’t be very useful in that case. For ideal results, most of the
same entities (e.g. GlobalVar
or Func
) should be in most versions,
with most of the changes being limited to within their definitions.
source§impl Plan<'_>
impl Plan<'_>
sourcepub fn pretty_print(&self) -> Versions<FragmentPostLayout>
pub fn pretty_print(&self) -> Versions<FragmentPostLayout>
Print the whole Plan
to a [Versions<pretty::Fragment>
] and perform
layout on its [pretty::Fragment
]s.
The resulting [Versions<pretty::FragmentPostLayout>
] value supports
fmt::Display
for convenience, but also more specific methods
(e.g. HTML output).
sourcepub fn pretty_print_deps_and_root_separately(
&self
) -> (Versions<FragmentPostLayout>, Versions<FragmentPostLayout>)
pub fn pretty_print_deps_and_root_separately( &self ) -> (Versions<FragmentPostLayout>, Versions<FragmentPostLayout>)
Like pretty_print
, but separately pretty-printing “root dependencies”
and the “root” itself (useful for nesting pretty-printed SPIR-T elsewhere).