Trait rustc_mir::hair::Mirror [−][src]
pub trait Mirror<'tcx> {
type Output;
fn make_mirror<'a, 'gcx>(self, cx: &mut Cx<'a, 'gcx, 'tcx>) -> Self::Output;
}🔬 This is a nightly-only experimental API. (rustc_private)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml instead?
"Mirroring" is the process of converting from a HIR type into one
of the HAIR types defined in this file. This is basically a "on
the fly" desugaring step that hides a lot of the messiness in the
tcx. For example, the mirror of a &'tcx hir::Expr is an
Expr<'tcx>.
Mirroring is gradual: when you mirror an outer expression like `e1
- e2
, the references to the inner expressionse1ande2areExprRef<'tcx>` instances, and they may or may not be eagerly mirrored. This allows a single AST node from the compiler to expand into one or more Hair nodes, which lets the Hair nodes be simpler.
Associated Types
type Output
🔬 This is a nightly-only experimental API. (rustc_private)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml instead?
Required Methods
fn make_mirror<'a, 'gcx>(self, cx: &mut Cx<'a, 'gcx, 'tcx>) -> Self::Output
🔬 This is a nightly-only experimental API. (rustc_private)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml instead?
Implementations on Foreign Types
impl<'tcx> Mirror<'tcx> for &'tcx Block[src]
impl<'tcx> Mirror<'tcx> for &'tcx Blocktype Output = Block<'tcx>
🔬 This is a nightly-only experimental API. (rustc_private)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml instead?
fn make_mirror<'a, 'gcx>(self, cx: &mut Cx<'a, 'gcx, 'tcx>) -> Block<'tcx>[src]
fn make_mirror<'a, 'gcx>(self, cx: &mut Cx<'a, 'gcx, 'tcx>) -> Block<'tcx>🔬 This is a nightly-only experimental API. (rustc_private)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml instead?
impl<'tcx> Mirror<'tcx> for &'tcx Expr[src]
impl<'tcx> Mirror<'tcx> for &'tcx Exprtype Output = Expr<'tcx>
🔬 This is a nightly-only experimental API. (rustc_private)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml instead?
fn make_mirror<'a, 'gcx>(self, cx: &mut Cx<'a, 'gcx, 'tcx>) -> Expr<'tcx>[src]
fn make_mirror<'a, 'gcx>(self, cx: &mut Cx<'a, 'gcx, 'tcx>) -> Expr<'tcx>🔬 This is a nightly-only experimental API. (rustc_private)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml instead?
Implementors
impl<'tcx> Mirror<'tcx> for rustc_mir::hair::Expr<'tcx> type Output = Expr<'tcx>;impl<'tcx> Mirror<'tcx> for ExprRef<'tcx> type Output = Expr<'tcx>;impl<'tcx> Mirror<'tcx> for Stmt<'tcx> type Output = Stmt<'tcx>;impl<'tcx> Mirror<'tcx> for StmtRef<'tcx> type Output = Stmt<'tcx>;impl<'tcx> Mirror<'tcx> for rustc_mir::hair::Block<'tcx> type Output = Block<'tcx>;