Struct rustc_interface::util::ReplaceBodyWithLoop [−][src]
Replaces function bodies with loop {} (an infinite loop). This gets rid of
all semantic errors in the body while still satisfying the return type,
except in certain cases, see below for more.
This pass is known as everybody_loops. Very punny.
As of March 2021, everybody_loops is only used for the
-Z unpretty=everybody_loops debugging option.
FIXME: Currently the everybody_loops transformation is not applied to:
const fn; support could be added, but hasn’t. Originallyconst fnwas skipped due to issue #43636 thatloopwas not supported for const evaluation.impl Trait, due to issue #43869 that functions returning impl Trait cannot be diverging. Solving this may require!to implement every trait, which relies on the an even more ambitious form of the closed RFC #1637. See also #34511.
Fields
within_static_or_const: boolnested_blocks: Option<Vec<Block>>resolver: &'a mut Resolver<'b>Implementations
impl<'a, 'b> ReplaceBodyWithLoop<'a, 'b>[src]
pub fn new(resolver: &'a mut Resolver<'b>) -> ReplaceBodyWithLoop<'a, 'b>[src]
fn run<R, F: FnOnce(&mut Self) -> R>(&mut self, is_const: bool, action: F) -> R[src]
fn should_ignore_fn(ret_ty: &FnRetTy) -> bool[src]
fn is_sig_const(sig: &FnSig) -> bool[src]
Trait Implementations
impl<'a> MutVisitor for ReplaceBodyWithLoop<'a, '_>[src]
fn visit_item_kind(&mut self, i: &mut ItemKind)[src]
fn flat_map_trait_item(
&mut self,
i: P<AssocItem>
) -> SmallVec<[P<AssocItem>; 1]>[src]
&mut self,
i: P<AssocItem>
) -> SmallVec<[P<AssocItem>; 1]>
fn flat_map_impl_item(&mut self, i: P<AssocItem>) -> SmallVec<[P<AssocItem>; 1]>[src]
fn visit_anon_const(&mut self, c: &mut AnonConst)[src]
fn visit_block(&mut self, b: &mut P<Block>)[src]
pub fn token_visiting_enabled(&self) -> bool[src]
pub fn visit_crate(&mut self, c: &mut Crate)[src]
pub fn visit_meta_list_item(&mut self, list_item: &mut NestedMetaItem)[src]
pub fn visit_meta_item(&mut self, meta_item: &mut MetaItem)[src]
pub fn visit_use_tree(&mut self, use_tree: &mut UseTree)[src]
pub fn flat_map_foreign_item(
&mut self,
ni: P<Item<ForeignItemKind>>
) -> SmallVec<[P<Item<ForeignItemKind>>; 1]>[src]
&mut self,
ni: P<Item<ForeignItemKind>>
) -> SmallVec<[P<Item<ForeignItemKind>>; 1]>
pub fn flat_map_item(
&mut self,
i: P<Item<ItemKind>>
) -> SmallVec<[P<Item<ItemKind>>; 1]>[src]
&mut self,
i: P<Item<ItemKind>>
) -> SmallVec<[P<Item<ItemKind>>; 1]>
pub fn visit_fn_header(&mut self, header: &mut FnHeader)[src]
pub fn flat_map_field_def(&mut self, fd: FieldDef) -> SmallVec<[FieldDef; 1]>[src]
pub fn visit_fn_decl(&mut self, d: &mut P<FnDecl>)[src]
pub fn visit_asyncness(&mut self, a: &mut Async)[src]
pub fn flat_map_stmt(&mut self, s: Stmt) -> SmallVec<[Stmt; 1]>[src]
pub fn flat_map_arm(&mut self, arm: Arm) -> SmallVec<[Arm; 1]>[src]
pub fn visit_pat(&mut self, p: &mut P<Pat>)[src]
pub fn visit_expr(&mut self, e: &mut P<Expr>)[src]
pub fn filter_map_expr(&mut self, e: P<Expr>) -> Option<P<Expr>>[src]
pub fn visit_generic_arg(&mut self, arg: &mut GenericArg)[src]
pub fn visit_ty(&mut self, t: &mut P<Ty>)[src]
pub fn visit_lifetime(&mut self, l: &mut Lifetime)[src]
pub fn visit_ty_constraint(&mut self, t: &mut AssocTyConstraint)[src]
pub fn visit_foreign_mod(&mut self, nm: &mut ForeignMod)[src]
pub fn flat_map_variant(&mut self, v: Variant) -> SmallVec<[Variant; 1]>[src]
pub fn visit_ident(&mut self, i: &mut Ident)[src]
pub fn visit_path(&mut self, p: &mut Path)[src]
pub fn visit_qself(&mut self, qs: &mut Option<QSelf>)[src]
pub fn visit_generic_args(&mut self, p: &mut GenericArgs)[src]
pub fn visit_angle_bracketed_parameter_data(
&mut self,
p: &mut AngleBracketedArgs
)[src]
&mut self,
p: &mut AngleBracketedArgs
)
pub fn visit_parenthesized_parameter_data(&mut self, p: &mut ParenthesizedArgs)[src]
pub fn visit_local(&mut self, l: &mut P<Local>)[src]
pub fn visit_mac_call(&mut self, mac: &mut MacCall)[src]
pub fn visit_macro_def(&mut self, def: &mut MacroDef)[src]
pub fn visit_label(&mut self, label: &mut Label)[src]
pub fn visit_attribute(&mut self, at: &mut Attribute)[src]
pub fn flat_map_param(&mut self, param: Param) -> SmallVec<[Param; 1]>[src]
pub fn visit_generics(&mut self, generics: &mut Generics)[src]
pub fn visit_trait_ref(&mut self, tr: &mut TraitRef)[src]
pub fn visit_poly_trait_ref(&mut self, p: &mut PolyTraitRef)[src]
pub fn visit_variant_data(&mut self, vdata: &mut VariantData)[src]
pub fn flat_map_generic_param(
&mut self,
param: GenericParam
) -> SmallVec<[GenericParam; 1]>[src]
&mut self,
param: GenericParam
) -> SmallVec<[GenericParam; 1]>
pub fn visit_param_bound(&mut self, tpb: &mut GenericBound)[src]
pub fn visit_mt(&mut self, mt: &mut MutTy)[src]
pub fn flat_map_expr_field(&mut self, f: ExprField) -> SmallVec<[ExprField; 1]>[src]
pub fn visit_where_clause(&mut self, where_clause: &mut WhereClause)[src]
pub fn visit_where_predicate(&mut self, where_predicate: &mut WherePredicate)[src]
pub fn visit_vis(&mut self, vis: &mut Visibility)[src]
pub fn visit_id(&mut self, _id: &mut NodeId)[src]
pub fn visit_span(&mut self, _sp: &mut Span)[src]
pub fn flat_map_pat_field(&mut self, fp: PatField) -> SmallVec<[PatField; 1]>[src]
Auto Trait Implementations
impl<'a, 'b> !RefUnwindSafe for ReplaceBodyWithLoop<'a, 'b>
impl<'a, 'b> !Send for ReplaceBodyWithLoop<'a, 'b>
impl<'a, 'b> !Sync for ReplaceBodyWithLoop<'a, 'b>
impl<'a, 'b> Unpin for ReplaceBodyWithLoop<'a, 'b> where
'b: 'a,
'b: 'a,
impl<'a, 'b> !UnwindSafe for ReplaceBodyWithLoop<'a, 'b>
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized, [src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized, [src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized, [src]
T: ?Sized,
pub fn borrow_mut(&mut self) -> &mut T[src]
impl<T> From<T> for T[src]
impl<T, U> Into<U> for T where
U: From<T>, [src]
U: From<T>,
impl<T, U> TryFrom<U> for T where
U: Into<T>, [src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>, [src]
U: TryFrom<T>,