diff --git a/charon-ml/name_matcher_parser/Ast.ml b/charon-ml/name_matcher_parser/Ast.ml index 95df4d9c7..40463259f 100644 --- a/charon-ml/name_matcher_parser/Ast.ml +++ b/charon-ml/name_matcher_parser/Ast.ml @@ -55,6 +55,7 @@ and pattern_elem = In order to not use disambiguators everywhere in patterns, we allow omitting the disambiguator when it is equal to 0. *) | PImpl of expr + | PWild (** A wildcard pattern, that matches anything *) (** An expression can be a type or a trait ref. diff --git a/charon-ml/name_matcher_parser/Lexer.mll b/charon-ml/name_matcher_parser/Lexer.mll index b7fe8fe06..c2145fb6e 100644 --- a/charon-ml/name_matcher_parser/Lexer.mll +++ b/charon-ml/name_matcher_parser/Lexer.mll @@ -18,6 +18,7 @@ rule token = parse | ''' { REGION (index lexbuf) } | "true" { TRUE } | "false" { FALSE } + | "_" { WILDCARD } | ident { IDENT (Lexing.lexeme lexbuf) } | digit { INT (Z.of_string (Lexing.lexeme lexbuf)) } | '(' { LEFT_BRACKET } diff --git a/charon-ml/name_matcher_parser/Parser.mly b/charon-ml/name_matcher_parser/Parser.mly index df1ff278a..e2c516193 100644 --- a/charon-ml/name_matcher_parser/Parser.mly +++ b/charon-ml/name_matcher_parser/Parser.mly @@ -6,6 +6,7 @@ open Ast %token VAR // For types and const generics %token REGION %token INT +%token WILDCARD %token STATIC_REGION %token SEP TRUE FALSE %token LEFT_BRACKET RIGHT_BRACKET @@ -38,6 +39,7 @@ pattern: | e=pattern_elem SEP n=pattern { e :: n } pattern_elem: + | WILDCARD { PWild } // (Instantiated) identifier | id=IDENT { PIdent (id, 0, []) } | id=IDENT; HASH; disamb=INT { PIdent (id, Z.to_int disamb, []) } diff --git a/charon-ml/src/NameMatcher.ml b/charon-ml/src/NameMatcher.ml index 724508d6e..389244935 100644 --- a/charon-ml/src/NameMatcher.ml +++ b/charon-ml/src/NameMatcher.ml @@ -123,6 +123,7 @@ and pattern_elem_to_string (c : print_config) (e : pattern_elem) : string = match c.tgt with | TkPattern | TkPretty -> "{" ^ ty ^ "}" | TkName -> ty) + | PWild -> "_" and expr_to_string (c : print_config) (e : expr) : string = match e with @@ -436,13 +437,35 @@ let match_literal (pl : literal) (l : Values.literal) : bool = let rec match_name_with_generics (ctx : 'fun_body ctx) (c : match_config) ?(m : maps = mk_empty_maps ()) (p : pattern) (n : T.name) (g : T.generic_args) : bool = + (* Handle monomorphized matching: if the name ends with a PeMonomorphized + element, use the monomorphized args and continue matching without that + element *) + let n, g = + match List.rev n with + | PeMonomorphized mono_args :: rest_rev -> + (* In this case, we may still have some late-bound generics in `g`, this could ONLY happen for regions *) + let regions_count, types_count, const_generics_count, trait_refs_count = + TypesUtils.generic_args_lengths g + in + assert ( + types_count = 0 && const_generics_count = 0 && trait_refs_count = 0); + (* We additionally append the regions from `g` to the monomorphized args, so that we can match against them. *) + let merged_args = + if regions_count > 0 then begin + (* Late-bound regions are appended after the monomorphized ones. *) + { mono_args with regions = mono_args.regions @ g.regions } + end + else mono_args + in + (List.rev rest_rev, merged_args) + | _ -> (n, g) + in match (p, n) with | [], [] -> raise (Failure "match_name_with_generics: attempt to match empty names and patterns") (* We shouldn't get there: the names/patterns should be non empty *) - | [], [ PeMonomorphized _ ] -> true (* We ignored monomorphizeds *) | [ PIdent (pid, pd, pg) ], [ PeIdent (id, d) ] -> log#ldebug (lazy @@ -484,6 +507,9 @@ let rec match_name_with_generics (ctx : 'fun_body ctx) (c : match_config) | ImplElemTrait impl_id -> match_expr_with_trait_impl_id ctx c pty impl_id && match_name_with_generics ctx c p n g) + | PWild :: p, _ :: n -> + (* Wildcard: skip this element in the name *) + match_name_with_generics ctx c p n g | _ -> false and match_name (ctx : 'fun_body ctx) (c : match_config) (p : pattern) @@ -719,10 +745,14 @@ let match_fn_ptr (ctx : 'fun_body ctx) (c : match_config) (p : pattern) let name = builtin_fun_id_to_string fid in match_name_with_generics ctx c p (to_name [ name ]) func.generics) | FunId (FRegular fid) -> + (* Lookup the function decl *) let d = Types.FunDeclId.Map.find fid ctx.crate.fun_decls in (* Match the pattern on the name of the function. *) let match_function_name = - match_name_with_generics ctx c p d.item_meta.name func.generics + let ret = + match_name_with_generics ctx c p d.item_meta.name func.generics + in + ret in (* Match the pattern on the trait implementation and method name, if applicable. *) let match_trait_ref = @@ -934,7 +964,10 @@ and path_elem_with_generic_args_to_pattern (ctx : 'fun_body ctx) | Some args -> [ PIdent (s, d, args) ] end | PeImpl impl -> [ impl_elem_to_pattern ctx c impl ] - | PeMonomorphized _ -> [] + | PeMonomorphized _ -> + (* In pattern generation, we skip monomorphized elements since patterns + are meant to match the logical structure, not the instantiation details *) + [] and impl_elem_to_pattern (ctx : 'fun_body ctx) (c : to_pat_config) (impl : T.impl_elem) : pattern_elem = @@ -1441,6 +1474,9 @@ module NameMatcherMap = struct (* Check if we reached the destination *) match name with | [] | [ PeMonomorphized _ ] -> + (* For tree search, we also consider monomorphized elements as terminal + since they represent instantiation details, not logical structure. + The monomorphized matching is always handled by the calling context. *) if g = TypesUtils.empty_generic_args then node_v else None | _ -> (* Explore the children *) diff --git a/charon-ml/tests/Test_NameMatcher.ml b/charon-ml/tests/Test_NameMatcher.ml index 21ca53e9a..ca6f9c2c9 100644 --- a/charon-ml/tests/Test_NameMatcher.ml +++ b/charon-ml/tests/Test_NameMatcher.ml @@ -69,17 +69,19 @@ module PatternTest = struct type env = { ctx : LlbcAst.block ctx; + file_name : string; match_config : match_config; fmt_env : PrintLlbcAst.fmt_env; print_config : print_config; to_pat_config : to_pat_config; } - let mk_env (ctx : LlbcAst.block ctx) : env = + let mk_env (ctx : LlbcAst.block ctx) file_name : env = let tgt = TkPattern in let match_with_trait_decl_refs = true in { ctx; + file_name; match_config = { map_vars_to_vars = false; match_with_trait_decl_refs }; print_config = { tgt }; fmt_env = ctx_to_fmt_env ctx; @@ -156,11 +158,12 @@ module PatternTest = struct match_fn_ptr env.ctx env.match_config test.pattern fn_ptr in if test.success && not match_success then ( - log#error "Pattern %s failed to match function %s\n" + log#error "Pattern %s failed to match function %s (in `%s`)\n" (pattern_to_string env.print_config test.pattern) (pattern_to_string env.print_config (fn_ptr_to_pattern env.ctx env.to_pat_config decl.signature.generics - fn_ptr)); + fn_ptr)) + env.file_name; false) else if (not test.success) && match_success then ( log#error "Pattern %s matches function %s but shouldn't\n" @@ -188,7 +191,7 @@ let annotated_rust_tests test_file = (* We look through all declarations for our special attributes and check each case. *) let ctx = ctx_from_crate crate in - let env = PatternTest.mk_env ctx in + let env = PatternTest.mk_env ctx test_file in let all_pass = T.FunDeclId.Map.for_all (fun _ (decl : fun_decl) -> diff --git a/charon-ml/tests/Tests.ml b/charon-ml/tests/Tests.ml index 7ae309ada..bb0fcf82d 100644 --- a/charon-ml/tests/Tests.ml +++ b/charon-ml/tests/Tests.ml @@ -15,3 +15,6 @@ let () = (* llbc files are copied into the `_build` dir by the `(deps)` rule in `./dune`. *) let () = Test_Deserialize.run_tests "test-outputs" let () = Test_NameMatcher.run_tests "test-outputs/ml-name-matcher-tests.llbc" + +let () = + Test_NameMatcher.run_tests "test-outputs/ml-mono-name-matcher-tests.llbc" diff --git a/charon/rustfmt.toml b/charon/rustfmt.toml new file mode 100644 index 000000000..350113681 --- /dev/null +++ b/charon/rustfmt.toml @@ -0,0 +1 @@ +style_edition = "2024" diff --git a/charon/src/name_matcher/mod.rs b/charon/src/name_matcher/mod.rs index e47888efe..e45ee51f9 100644 --- a/charon/src/name_matcher/mod.rs +++ b/charon/src/name_matcher/mod.rs @@ -3,7 +3,7 @@ use std::cmp::Ordering; use itertools::{EitherOrBoth, Itertools}; use serde::{Deserialize, Serialize}; -use crate::ast::*; +use crate::{ast::*, formatter::IntoFormatter, pretty::FmtWithCtx}; mod parser; @@ -65,6 +65,28 @@ impl Pattern { args: Option<&GenericArgs>, ) -> bool { let mut scrutinee_elems = name.name.as_slice(); + let mut args = args.cloned(); + if let [prefix @ .., PathElem::Monomorphized(mono_args)] = scrutinee_elems { + // In this case, we may still have some late-bound generics in `args`, this could ONLY happen for regions + assert!( + args.is_none() + || args.as_ref().unwrap().len() == args.as_ref().unwrap().regions.elem_count(), + "In pattern \"{}\" matching against name \"{}\": we have both monomorphized generics {} and regular generics {}", + self, + name.with_ctx(&ctx.into_fmt()), + mono_args.with_ctx(&ctx.into_fmt()), + args.unwrap().with_ctx(&ctx.into_fmt()) + ); + // We additionally append the regions from `args` to the monomorphized args, so that we can match against them. + let mut mono_args = (**mono_args).clone(); + if let Some(args) = args { + // Late-bound regions are appended after the monomorphized ones. + mono_args.regions.extend(args.regions.into_iter()); + } + scrutinee_elems = prefix; + args = Some(mono_args); + }; + let args = args.as_ref(); // Patterns that start with an impl block match that impl block anywhere. In such a case we // truncate the scrutinee name to start with the rightmost impl in its name. This isn't // fully precise in case of impls within impls, but we'll ignore that. diff --git a/charon/tests/test-rust-name-matcher.rs b/charon/tests/test-rust-name-matcher.rs index 603294848..924b6cbd6 100644 --- a/charon/tests/test-rust-name-matcher.rs +++ b/charon/tests/test-rust-name-matcher.rs @@ -30,9 +30,7 @@ fn parse_pattern_attr(a: &Attribute) -> Option<(bool, Pattern)> { } } -#[test] -fn test_name_matcher() -> anyhow::Result<()> { - let crate_data = util::translate_rust_text(&std::fs::read_to_string(TEST_FILE)?, &[])?; +fn test_crate_data(crate_data: &TranslatedCrate) -> anyhow::Result<()> { let fmt_ctx = &crate_data.into_fmt(); for item in crate_data.all_items() { @@ -64,3 +62,12 @@ fn test_name_matcher() -> anyhow::Result<()> { Ok(()) } + +#[test] +fn test_name_matcher() -> anyhow::Result<()> { + let code = &std::fs::read_to_string(TEST_FILE)?; + let crate_data = util::translate_rust_text(code, &[])?; + test_crate_data(&crate_data)?; + let mono_crate_data = util::translate_rust_text(code, &["--monomorphize"])?; + test_crate_data(&mono_crate_data) +} diff --git a/charon/tests/ui/ml-mono-name-matcher-tests.out b/charon/tests/ui/ml-mono-name-matcher-tests.out new file mode 100644 index 000000000..ae00c8a46 --- /dev/null +++ b/charon/tests/ui/ml-mono-name-matcher-tests.out @@ -0,0 +1,453 @@ +# Final LLBC before serialization: + +// Full name: core::marker::MetaSized:: +#[lang_item("meta_sized")] +pub trait MetaSized:: + +// Full name: core::marker::Sized:: +#[lang_item("sized")] +pub trait Sized:: +{ + parent_clause0 : [@TraitClause0]: MetaSized:: + non-dyn-compatible +} + +// Full name: core::marker::MetaSized:: +#[lang_item("meta_sized")] +pub trait MetaSized:: + +// Full name: core::marker::Sized:: +#[lang_item("sized")] +pub trait Sized:: +{ + parent_clause0 : [@TraitClause0]: MetaSized:: + non-dyn-compatible +} + +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + +// Full name: core::marker::Sized +#[lang_item("sized")] +pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized + non-dyn-compatible +} + +// Full name: core::marker::MetaSized:: +#[lang_item("meta_sized")] +pub trait MetaSized:: + +// Full name: core::marker::Sized:: +#[lang_item("sized")] +pub trait Sized:: +{ + parent_clause0 : [@TraitClause0]: MetaSized:: + non-dyn-compatible +} + +// Full name: core::marker::MetaSized::> +#[lang_item("meta_sized")] +pub trait MetaSized::> + +// Full name: core::marker::Sized::> +#[lang_item("sized")] +pub trait Sized::> +{ + parent_clause0 : [@TraitClause0]: MetaSized::> + non-dyn-compatible +} + +// Full name: core::marker::MetaSized::<&'_ (Str)> +#[lang_item("meta_sized")] +pub trait MetaSized::<&'_ (Str)> + +// Full name: core::marker::Sized::<&'_ (Str)> +#[lang_item("sized")] +pub trait Sized::<&'_ (Str)> +{ + parent_clause0 : [@TraitClause0]: MetaSized::<&'_ (Str)> + non-dyn-compatible +} + +// Full name: core::marker::MetaSized::<&'_ (Slice)> +#[lang_item("meta_sized")] +pub trait MetaSized::<&'_ (Slice)> + +// Full name: core::marker::Sized::<&'_ (Slice)> +#[lang_item("sized")] +pub trait Sized::<&'_ (Slice)> +{ + parent_clause0 : [@TraitClause0]: MetaSized::<&'_ (Slice)> + non-dyn-compatible +} + +// Full name: core::marker::MetaSized::<&'_ mut (Slice)> +#[lang_item("meta_sized")] +pub trait MetaSized::<&'_ mut (Slice)> + +// Full name: core::marker::Sized::<&'_ mut (Slice)> +#[lang_item("sized")] +pub trait Sized::<&'_ mut (Slice)> +{ + parent_clause0 : [@TraitClause0]: MetaSized::<&'_ mut (Slice)> + non-dyn-compatible +} + +// Full name: core::marker::MetaSized::> +#[lang_item("meta_sized")] +pub trait MetaSized::> + +// Full name: core::ops::drop::Drop:: +#[lang_item("drop")] +pub trait Drop:: +{ + parent_clause0 : [@TraitClause0]: MetaSized:: + fn drop<'_0> = drop::<'_0_0> + vtable: core::ops::drop::Drop::{vtable}:: +} + +// Full name: core::ops::drop::Drop::<&'_ (Str)> +#[lang_item("drop")] +pub trait Drop::<&'_ (Str)> +{ + parent_clause0 : [@TraitClause0]: MetaSized::<&'_ (Str)> + fn drop<'_0> = drop::<&'_ (Str)><'_0_0> + vtable: core::ops::drop::Drop::{vtable}::<&'_ (Str)> +} + +// Full name: core::ops::drop::Drop::drop:: +pub fn drop::<'_0>(@1: &'_0 mut (i32)) + +// Full name: core::ops::drop::Drop::drop::<&'_ (Str)> +pub fn drop::<&'_ (Str)><'_0>(@1: &'_0 mut (&'_ (Str))) + +// Full name: core::ops::range::RangeFrom:: +#[lang_item("RangeFrom")] +pub struct RangeFrom:: { + start: usize, +} + +// Full name: core::ops::index::Index::, RangeFrom::> +#[lang_item("index")] +pub trait Index::, RangeFrom::> +{ + parent_clause0 : [@TraitClause0]: MetaSized::> + parent_clause1 : [@TraitClause1]: MetaSized::> + fn index<'_0> = core::ops::index::Index::index::, RangeFrom::><'_0_0> + vtable: core::ops::index::Index::{vtable}::, RangeFrom::>> +} + +pub fn core::ops::index::Index::index<'_0>(@1: &'_0 (Slice), @2: RangeFrom::) -> &'_0 (Slice) + +pub fn core::ops::index::Index::index::, RangeFrom::><'_0>(@1: &'_0 (Slice), @2: RangeFrom::) -> &'_0 (Slice) + +// Full name: core::option::Option:: +#[lang_item("Option")] +pub enum Option:: { + None, + Some(i32), +} + +// Full name: core::option::Option +#[lang_item("Option")] +pub enum Option +where + [@TraitClause0]: Sized, +{ + None, + Some(T), +} + +// Full name: core::option::Option::<&'_ (Slice)> +#[lang_item("Option")] +pub enum Option::<&'_ (Slice)> { + None, + Some(&'_ (Slice)), +} + +// Full name: core::option::Option::<&'_ mut (Slice)> +#[lang_item("Option")] +pub enum Option::<&'_ mut (Slice)> { + None, + Some(&'_ mut (Slice)), +} + +// Full name: core::option::{Option::}::is_some:: +pub fn is_some::<'_0>(@1: &'_0 (Option::)) -> bool + +// Full name: core::slice::index::{impl Index::, RangeFrom::>}::index::> +pub fn {impl Index::, RangeFrom::>}::index::><'_0>(@1: &'_0 (Slice), @2: RangeFrom::) -> &'_0 (Slice) + +// Full name: core::slice::index::{impl Index::, RangeFrom::>}::> +impl Index::, RangeFrom::> { + parent_clause0 = MetaSized::> + parent_clause1 = MetaSized::> + fn index<'_0> = {impl Index::, RangeFrom::>}::index::><'_0_0> + vtable: {impl Index::, RangeFrom::>}::{vtable}::> +} + +// Full name: core::slice::index::private_slice_index::Sealed::> +pub trait Sealed::> +{ + parent_clause0 : [@TraitClause0]: MetaSized::> + vtable: core::slice::index::private_slice_index::Sealed::{vtable}::> +} + +// Full name: core::slice::index::private_slice_index::{impl Sealed::>} +impl Sealed::> { + parent_clause0 = MetaSized::> + vtable: {impl Sealed::>}::{vtable} +} + +// Full name: core::slice::index::SliceIndex::, Slice> +#[lang_item("SliceIndex")] +pub trait SliceIndex::, Slice> +{ + parent_clause0 : [@TraitClause0]: MetaSized::> + parent_clause1 : [@TraitClause1]: Sealed::> + parent_clause2 : [@TraitClause2]: MetaSized::> + fn get<'_0> = core::slice::index::SliceIndex::get::, Slice><'_0_0> + fn get_mut<'_0> = core::slice::index::SliceIndex::get_mut::, Slice><'_0_0> + fn get_unchecked = core::slice::index::SliceIndex::get_unchecked::, Slice> + fn get_unchecked_mut = core::slice::index::SliceIndex::get_unchecked_mut::, Slice> + fn index<'_0> = core::slice::index::SliceIndex::index::, Slice><'_0_0> + fn index_mut<'_0> = core::slice::index::SliceIndex::index_mut::, Slice><'_0_0> + vtable: core::slice::index::SliceIndex::{vtable}::, Slice>> +} + +pub fn core::slice::index::SliceIndex::get::, Slice><'_0>(@1: RangeFrom::, @2: &'_0 (Slice)) -> Option::<&'_ (Slice)> + +pub fn core::slice::index::SliceIndex::get<'_0>(@1: RangeFrom::, @2: &'_0 (Slice)) -> Option::<&'_ (Slice)> + +pub fn core::slice::index::SliceIndex::get_mut::, Slice><'_0>(@1: RangeFrom::, @2: &'_0 mut (Slice)) -> Option::<&'_ mut (Slice)> + +pub fn core::slice::index::SliceIndex::get_mut<'_0>(@1: RangeFrom::, @2: &'_0 mut (Slice)) -> Option::<&'_ mut (Slice)> + +pub unsafe fn core::slice::index::SliceIndex::get_unchecked::, Slice>(@1: RangeFrom::, @2: *const Slice) -> *const Slice + +pub unsafe fn core::slice::index::SliceIndex::get_unchecked(@1: RangeFrom::, @2: *const Slice) -> *const Slice + +pub unsafe fn core::slice::index::SliceIndex::get_unchecked_mut::, Slice>(@1: RangeFrom::, @2: *mut Slice) -> *mut Slice + +pub unsafe fn core::slice::index::SliceIndex::get_unchecked_mut(@1: RangeFrom::, @2: *mut Slice) -> *mut Slice + +pub fn core::slice::index::SliceIndex::index::, Slice><'_0>(@1: RangeFrom::, @2: &'_0 (Slice)) -> &'_0 (Slice) + +pub fn core::slice::index::SliceIndex::index<'_0>(@1: RangeFrom::, @2: &'_0 (Slice)) -> &'_0 (Slice) + +pub fn core::slice::index::SliceIndex::index_mut::, Slice><'_0>(@1: RangeFrom::, @2: &'_0 mut (Slice)) -> &'_0 mut (Slice) + +pub fn core::slice::index::SliceIndex::index_mut<'_0>(@1: RangeFrom::, @2: &'_0 mut (Slice)) -> &'_0 mut (Slice) + +// Full name: core::slice::index::{impl SliceIndex::, Slice>}::get:: +pub fn {impl SliceIndex::, Slice>}::get::<'_0>(@1: RangeFrom::, @2: &'_0 (Slice)) -> Option::<&'_ (Slice)> + +// Full name: core::slice::index::{impl SliceIndex::, Slice>}::get_mut:: +pub fn {impl SliceIndex::, Slice>}::get_mut::<'_0>(@1: RangeFrom::, @2: &'_0 mut (Slice)) -> Option::<&'_ mut (Slice)> + +// Full name: core::slice::index::{impl SliceIndex::, Slice>}::get_unchecked:: +pub unsafe fn {impl SliceIndex::, Slice>}::get_unchecked::(@1: RangeFrom::, @2: *const Slice) -> *const Slice + +// Full name: core::slice::index::{impl SliceIndex::, Slice>}::get_unchecked_mut:: +pub unsafe fn {impl SliceIndex::, Slice>}::get_unchecked_mut::(@1: RangeFrom::, @2: *mut Slice) -> *mut Slice + +// Full name: core::slice::index::{impl SliceIndex::, Slice>}::index:: +pub fn {impl SliceIndex::, Slice>}::index::<'_0>(@1: RangeFrom::, @2: &'_0 (Slice)) -> &'_0 (Slice) + +// Full name: core::slice::index::{impl SliceIndex::, Slice>}::index_mut:: +pub fn {impl SliceIndex::, Slice>}::index_mut::<'_0>(@1: RangeFrom::, @2: &'_0 mut (Slice)) -> &'_0 mut (Slice) + +// Full name: core::slice::index::{impl SliceIndex::, Slice>}:: +impl SliceIndex::, Slice> { + parent_clause0 = MetaSized::> + parent_clause1 = {impl Sealed::>} + parent_clause2 = MetaSized::> + fn get<'_0> = {impl SliceIndex::, Slice>}::get::<'_0_0> + fn get_mut<'_0> = {impl SliceIndex::, Slice>}::get_mut::<'_0_0> + fn get_unchecked = {impl SliceIndex::, Slice>}::get_unchecked:: + fn get_unchecked_mut = {impl SliceIndex::, Slice>}::get_unchecked_mut:: + fn index<'_0> = {impl SliceIndex::, Slice>}::index::<'_0_0> + fn index_mut<'_0> = {impl SliceIndex::, Slice>}::index_mut::<'_0_0> + vtable: {impl SliceIndex::, Slice>}::{vtable}:: +} + +fn UNIT_METADATA() +{ + let @0: (); // return + + @0 := () + return +} + +const UNIT_METADATA: () = @Fun0() + +// Full name: test_crate::foo::bar +fn bar() +{ + let @0: (); // return + + @0 := () + @0 := () + return +} + +// Full name: test_crate::foo +fn foo() +{ + let @0: (); // return + let @1: bool; // anonymous local + let @2: &'_ (Option::); // anonymous local + let @3: Option::; // anonymous local + let slice@4: &'_ (Slice); // local + let @5: &'_ (Array); // anonymous local + let @6: &'_ (Array); // anonymous local + let @7: Array; // anonymous local + let @8: &'_ (Slice); // anonymous local + let @9: &'_ (Slice); // anonymous local + let @10: &'_ (Slice); // anonymous local + let @11: RangeFrom::; // anonymous local + + @0 := () + storage_live(@1) + storage_live(@2) + storage_live(@3) + @3 := Option::::Some { 0: const (0 : i32) } + @2 := &@3 + @1 := is_some::<'_>(move (@2)) + storage_dead(@2) + storage_dead(@3) + storage_dead(@1) + storage_live(slice@4) + storage_live(@5) + storage_live(@6) + storage_live(@7) + @7 := [const (false)] + @6 := &@7 + @5 := &*(@6) + slice@4 := @ArrayToSliceShared<'_, bool, 1 : usize>(move (@5)) + storage_dead(@5) + storage_dead(@6) + storage_live(@8) + storage_live(@9) + storage_live(@10) + @10 := &*(slice@4) with_metadata(copy (slice@4.metadata)) + storage_live(@11) + @11 := RangeFrom:: { start: const (1 : usize) } + @9 := {impl Index::, RangeFrom::>}::index::><'_>(move (@10), move (@11)) + storage_dead(@11) + storage_dead(@10) + @8 := &*(@9) with_metadata(copy (@9.metadata)) + storage_dead(@8) + @0 := () + storage_dead(@9) + storage_dead(@7) + storage_dead(slice@4) + return +} + +fn test_crate::funs_with_disambiguator::f() -> u32 +{ + let @0: u32; // return + + @0 := const (0 : u32) + return +} + +fn test_crate::funs_with_disambiguator::f#1() -> u32 +{ + let @0: u32; // return + + @0 := const (1 : u32) + return +} + +// Full name: test_crate::funs_with_disambiguator +fn funs_with_disambiguator(@1: bool) -> u32 +{ + let @0: u32; // return + let b@1: bool; // arg #1 + let @2: bool; // anonymous local + + storage_live(@2) + @2 := copy (b@1) + if move (@2) { + @0 := test_crate::funs_with_disambiguator::f() + } + else { + @0 := test_crate::funs_with_disambiguator::f#1() + } + storage_dead(@2) + return +} + +// Full name: test_crate::MonoContainer:: +struct MonoContainer:: { + item: i32, +} + +// Full name: test_crate::MonoContainer::<&'_ (Str)> +struct MonoContainer::<&'_ (Str)> { + item: &'_ (Str), +} + +// Full name: test_crate::MonoContainer +struct MonoContainer +where + [@TraitClause0]: Sized, +{ + item: T, +} + +fn test_crate::{MonoContainer::}::create::(@1: i32) -> MonoContainer:: +{ + let @0: MonoContainer::; // return + let item@1: i32; // arg #1 + let @2: i32; // anonymous local + + storage_live(@2) + @2 := move (item@1) + @0 := MonoContainer:: { item: move (@2) } + drop[Drop::] @2 + storage_dead(@2) + drop[Drop::] item@1 + return +} + +fn test_crate::{MonoContainer::<&'_ (Str)>}::create::<&'_ (Str)>(@1: &'_ (Str)) -> MonoContainer::<&'_ (Str)> +{ + let @0: MonoContainer::<&'_ (Str)>; // return + let item@1: &'_ (Str); // arg #1 + let @2: &'_ (Str); // anonymous local + + storage_live(@2) + @2 := move (item@1) + @0 := MonoContainer::<&'_ (Str)> { item: move (@2) } + drop[Drop::<&'_ (Str)>] @2 + storage_dead(@2) + drop[Drop::<&'_ (Str)>] item@1 + return +} + +// Full name: test_crate::mono_usage +fn mono_usage() +{ + let @0: (); // return + let _container1@1: MonoContainer::; // local + let _container2@2: MonoContainer::<&'_ (Str)>; // local + + @0 := () + storage_live(_container1@1) + _container1@1 := test_crate::{MonoContainer::}::create::(const (42 : i32)) + storage_live(_container2@2) + _container2@2 := test_crate::{MonoContainer::<&'_ (Str)>}::create::<&'_ (Str)>(const ("test")) + @0 := () + storage_dead(_container2@2) + storage_dead(_container1@1) + return +} + + + diff --git a/charon/tests/ui/ml-mono-name-matcher-tests.rs b/charon/tests/ui/ml-mono-name-matcher-tests.rs new file mode 100644 index 000000000..f15475456 --- /dev/null +++ b/charon/tests/ui/ml-mono-name-matcher-tests.rs @@ -0,0 +1,103 @@ +//@ charon-args=--monomorphize +#![feature(register_tool)] +#![register_tool(pattern)] +//! Tests for the ml name matcher. This is in the rust test suite so that the llbc file gets +//! generated. Tests on the ml side will then inspect the file and check that each item matches the +//! specified pattern. + +mod foo { + #[pattern::pass("test_crate::foo::bar")] + #[pattern::fail("crate::foo::bar")] + #[pattern::fail("foo::bar")] + fn bar() {} +} + +trait Trait { + fn method(); +} + +impl Trait> for Box { + #[pattern::pass( + "test_crate::{test_crate::Trait, core::option::Option<@T>>}::method" + )] + // `Box` is special: it can be abbreviated. + #[pattern::pass("test_crate::{test_crate::Trait, core::option::Option<@T>>}::method")] + // Can't abbreviate `Option`, only `Box` is special like that. + #[pattern::fail("test_crate::{test_crate::Trait, Option<@T>>}::method")] + // More general patterns work too. + #[pattern::pass( + "test_crate::{test_crate::Trait, core::option::Option<@U>>}::method" + )] + #[pattern::pass("test_crate::{test_crate::Trait<@T, @U>}::method")] + #[pattern::pass("test_crate::Trait<@T, @U>::method")] + fn method() {} +} + +impl Trait> for Option { + // Using the same variable name twice means they must match. This is not the case here. + // TODO: this should not pass! + #[pattern::pass( + "test_crate::{test_crate::Trait, alloc::boxed::Box<@T>>}::method" + )] + #[pattern::pass( + "test_crate::{test_crate::Trait, alloc::boxed::Box<@U>>}::method" + )] + fn method() {} +} + +// `call[i]` is a hack to be able to refer to `Call` statements inside the function body. +#[pattern::pass(call[0], "core::option::{core::option::Option<@T>}::is_some<'_, i32>")] +// Regions can be omitted +#[pattern::pass(call[0], "core::option::{core::option::Option<@T>}::is_some")] +#[pattern::pass(call[0], "core::option::{core::option::Option<@T>}::is_some<@T>")] +// Generic arguments are not required. +#[pattern::pass(call[0], "core::option::{core::option::Option<@T>}::is_some")] +#[pattern::pass(call[1], "ArrayToSliceShared<'_, bool, 1>")] +// This is a trait instance call. +#[pattern::pass(call[2], "core::ops::index::Index<[bool], core::ops::range::RangeFrom>::index")] +#[pattern::pass(call[2], "core::ops::index::Index<[@T], @I>::index")] +// We can reference the method directly. +#[pattern::pass(call[2], "core::slice::index::{core::ops::index::Index<[@T], @I>}::index>")] +fn foo() { + let _ = Some(0).is_some(); + let slice: &[bool] = &[false]; + let _ = &slice[1..]; +} + +#[pattern::pass(call[0], "test_crate::funs_with_disambiguator::f")] +#[pattern::pass(call[0], "test_crate::funs_with_disambiguator::f#0")] +#[pattern::fail(call[0], "test_crate::funs_with_disambiguator::f#1")] +#[pattern::pass(call[1], "test_crate::funs_with_disambiguator::f#1")] +#[pattern::fail(call[1], "test_crate::funs_with_disambiguator::f#0")] +#[pattern::fail(call[1], "test_crate::funs_with_disambiguator::f")] +fn funs_with_disambiguator(b: bool) -> u32 { + if b { + fn f() -> u32 { + 0 + } + f() + } else { + fn f() -> u32 { + 1 + } + f() + } +} + +struct MonoContainer { + item: T, +} + +impl MonoContainer { + #[pattern::pass("test_crate::{test_crate::MonoContainer<@T>}::create")] + #[pattern::pass("test_crate::_::create")] + fn create(item: T) -> Self { + Self { item } + } +} + +#[pattern::pass("test_crate::mono_usage")] +fn mono_usage() { + let _container1 = MonoContainer::create(42i32); + let _container2 = MonoContainer::create("test"); +} diff --git a/charon/tests/ui/ml-name-matcher-tests.out b/charon/tests/ui/ml-name-matcher-tests.out index 6f3f02a15..c32b11fe4 100644 --- a/charon/tests/ui/ml-name-matcher-tests.out +++ b/charon/tests/ui/ml-name-matcher-tests.out @@ -12,6 +12,20 @@ pub trait Sized non-dyn-compatible } +// Full name: core::ops::drop::Drop +#[lang_item("drop")] +pub trait Drop +{ + parent_clause0 : [@TraitClause0]: MetaSized + fn drop<'_0> = drop<'_0_0, Self>[Self] + vtable: core::ops::drop::Drop::{vtable} +} + +// Full name: core::ops::drop::Drop::drop +pub fn drop<'_0, Self>(@1: &'_0 mut (Self)) +where + [@TraitClause0]: Drop, + // Full name: core::ops::index::Index #[lang_item("index")] pub trait Index @@ -355,5 +369,49 @@ fn funs_with_disambiguator(@1: bool) -> u32 return } +// Full name: test_crate::MonoContainer +struct MonoContainer +where + [@TraitClause0]: Sized, +{ + item: T, +} + +// Full name: test_crate::{MonoContainer[@TraitClause0]}::create +fn create(@1: T) -> MonoContainer[@TraitClause0] +where + [@TraitClause0]: Sized, +{ + let @0: MonoContainer[@TraitClause0]; // return + let item@1: T; // arg #1 + let @2: T; // anonymous local + + storage_live(@2) + @2 := move (item@1) + @0 := MonoContainer { item: move (@2) } + drop[Drop] @2 + storage_dead(@2) + drop[Drop] item@1 + return +} + +// Full name: test_crate::mono_usage +fn mono_usage() +{ + let @0: (); // return + let _container1@1: MonoContainer[Sized]; // local + let _container2@2: MonoContainer<&'_ (Str)>[Sized<&'_ (Str)>]; // local + + @0 := () + storage_live(_container1@1) + _container1@1 := create[Sized](const (42 : i32)) + storage_live(_container2@2) + _container2@2 := create<&'_ (Str)>[Sized<&'_ (Str)>](const ("test")) + @0 := () + storage_dead(_container2@2) + storage_dead(_container1@1) + return +} + diff --git a/charon/tests/ui/ml-name-matcher-tests.rs b/charon/tests/ui/ml-name-matcher-tests.rs index 2906f6406..8f6d9a0ba 100644 --- a/charon/tests/ui/ml-name-matcher-tests.rs +++ b/charon/tests/ui/ml-name-matcher-tests.rs @@ -69,13 +69,34 @@ fn foo() { #[pattern::pass(call[1], "test_crate::funs_with_disambiguator::f#1")] #[pattern::fail(call[1], "test_crate::funs_with_disambiguator::f#0")] #[pattern::fail(call[1], "test_crate::funs_with_disambiguator::f")] -fn funs_with_disambiguator(b : bool) ->u32 { +fn funs_with_disambiguator(b: bool) -> u32 { if b { - fn f() -> u32 { 0 } + fn f() -> u32 { + 0 + } f() - } - else { - fn f() -> u32 { 1 } + } else { + fn f() -> u32 { + 1 + } f() } } + +struct MonoContainer { + item: T, +} + +impl MonoContainer { + #[pattern::pass("test_crate::{test_crate::MonoContainer<@T>}::create")] + #[pattern::pass("test_crate::_::create")] + fn create(item: T) -> Self { + Self { item } + } +} + +#[pattern::pass("test_crate::mono_usage")] +fn mono_usage() { + let _container1 = MonoContainer::create(42i32); + let _container2 = MonoContainer::create("test"); +} diff --git a/charon/tests/ui/rust-name-matcher-tests.out b/charon/tests/ui/rust-name-matcher-tests.out index 3e970f2e7..7c5666747 100644 --- a/charon/tests/ui/rust-name-matcher-tests.out +++ b/charon/tests/ui/rust-name-matcher-tests.out @@ -12,6 +12,20 @@ pub trait Sized non-dyn-compatible } +// Full name: core::ops::drop::Drop +#[lang_item("drop")] +pub trait Drop +{ + parent_clause0 : [@TraitClause0]: MetaSized + fn drop<'_0> = drop<'_0_0, Self>[Self] + vtable: core::ops::drop::Drop::{vtable} +} + +// Full name: core::ops::drop::Drop::drop +pub fn drop<'_0, Self>(@1: &'_0 mut (Self)) +where + [@TraitClause0]: Drop, + // Full name: core::option::Option #[lang_item("Option")] pub enum Option @@ -132,5 +146,73 @@ where non-dyn-compatible } +// Full name: test_crate::Generic +struct Generic +where + [@TraitClause0]: Sized, +{ + value: T, +} + +// Full name: test_crate::{Generic[@TraitClause0]}::new +fn new(@1: T) -> Generic[@TraitClause0] +where + [@TraitClause0]: Sized, +{ + let @0: Generic[@TraitClause0]; // return + let value@1: T; // arg #1 + let @2: T; // anonymous local + + storage_live(@2) + @2 := move (value@1) + @0 := Generic { value: move (@2) } + drop[Drop] @2 + storage_dead(@2) + drop[Drop] value@1 + return +} + +// Full name: test_crate::{Generic[@TraitClause0]}::get +fn get<'_0, T>(@1: &'_0 (Generic[@TraitClause0])) -> &'_0 (T) +where + [@TraitClause0]: Sized, +{ + let @0: &'_ (T); // return + let self@1: &'_ (Generic[@TraitClause0]); // arg #1 + let @2: &'_ (T); // anonymous local + + storage_live(@2) + @2 := &(*(self@1)).value + @0 := &*(@2) + storage_dead(@2) + return +} + +// Full name: test_crate::use_generic +fn use_generic() +{ + let @0: (); // return + let _int_generic@1: Generic[Sized]; // local + let _str_generic@2: Generic<&'_ (Str)>[Sized<&'_ (Str)>]; // local + let @3: &'_ (i32); // anonymous local + let @4: &'_ (Generic[Sized]); // anonymous local + + @0 := () + storage_live(_int_generic@1) + _int_generic@1 := new[Sized](const (42 : i32)) + storage_live(_str_generic@2) + _str_generic@2 := new<&'_ (Str)>[Sized<&'_ (Str)>](const ("hello")) + storage_live(@3) + storage_live(@4) + @4 := &_int_generic@1 + @3 := get<'_, i32>[Sized](move (@4)) + storage_dead(@4) + storage_dead(@3) + @0 := () + storage_dead(_str_generic@2) + storage_dead(_int_generic@1) + return +} + diff --git a/charon/tests/ui/rust-name-matcher-tests.rs b/charon/tests/ui/rust-name-matcher-tests.rs index 4d28ae8db..7af930184 100644 --- a/charon/tests/ui/rust-name-matcher-tests.rs +++ b/charon/tests/ui/rust-name-matcher-tests.rs @@ -64,3 +64,27 @@ impl Trait for [T] { impl Trait for &[T] { fn method() {} } + +struct Generic { + value: T, +} + +impl Generic { + #[pattern::pass("test_crate::_::new")] + #[pattern::pass("_::_::new")] + fn new(value: T) -> Self { + Self { value } + } + + #[pattern::pass("test_crate::_::get")] + fn get(&self) -> &T { + &self.value + } +} + +#[pattern::pass("test_crate::use_generic")] +fn use_generic() { + let _int_generic = Generic::new(42i32); + let _str_generic = Generic::new("hello"); + let _ = _int_generic.get(); +} diff --git a/charon/tests/ui/trait-instance-id.out b/charon/tests/ui/trait-instance-id.out deleted file mode 100644 index a3ab6d4c6..000000000 --- a/charon/tests/ui/trait-instance-id.out +++ /dev/null @@ -1,1909 +0,0 @@ -# Final LLBC before serialization: - -trait core::marker::Sized - -opaque type core::array::iter::IntoIter - where - [@TraitClause0]: core::marker::Sized, - -enum core::option::Option - where - [@TraitClause0]: core::marker::Sized, - = -| None() -| Some(T) - - -opaque type core::slice::iter::Iter<'a, T> - where - [@TraitClause0]: core::marker::Sized, - T : 'a, - T : 'a, - -opaque type core::slice::iter::Chunks<'a, T> - where - [@TraitClause0]: core::marker::Sized, - T : 'a, - T : 'a, - -opaque type core::slice::iter::ChunksExact<'a, T> - where - [@TraitClause0]: core::marker::Sized, - T : 'a, - T : 'a, - -enum core::panicking::AssertKind = -| Eq() -| Ne() -| Match() - - -opaque type core::fmt::Arguments<'a> - where - 'a : 'a, - -enum core::result::Result - where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::marker::Sized, - = -| Ok(T) -| Err(E) - - -trait core::clone::Clone -{ - parent_clause0 : [@TraitClause0]: core::marker::Sized - fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self>[Self] - fn clone_from<'_0, '_1> = core::clone::Clone::clone_from<'_0_0, '_0_1, Self>[Self] -} - -trait core::marker::Copy -{ - parent_clause0 : [@TraitClause0]: core::clone::Clone -} - -trait core::num::nonzero::private::Sealed - -trait core::num::nonzero::ZeroablePrimitive -{ - parent_clause0 : [@TraitClause0]: core::marker::Sized - parent_clause1 : [@TraitClause1]: core::marker::Copy - parent_clause2 : [@TraitClause2]: core::num::nonzero::private::Sealed - parent_clause3 : [@TraitClause3]: core::marker::Copy - parent_clause4 : [@TraitClause4]: core::clone::Clone - parent_clause5 : [@TraitClause5]: core::marker::Sized - type NonZeroInner -} - -opaque type core::num::nonzero::NonZero - where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::num::nonzero::ZeroablePrimitive, - -fn core::clone::impls::{impl core::clone::Clone for usize}#5::clone<'_0>(@1: &'_0 (usize)) -> usize - -impl core::clone::impls::{impl core::clone::Clone for usize}#5 : core::clone::Clone -{ - parent_clause0 = core::marker::Sized - fn clone<'_0> = core::clone::impls::{impl core::clone::Clone for usize}#5::clone<'_0_0> -} - -impl core::marker::{impl core::marker::Copy for usize}#37 : core::marker::Copy -{ - parent_clause0 = core::clone::impls::{impl core::clone::Clone for usize}#5 -} - -impl core::num::nonzero::{impl core::num::nonzero::private::Sealed for usize}#25 : core::num::nonzero::private::Sealed - -opaque type core::num::nonzero::private::NonZeroUsizeInner - -fn core::num::nonzero::private::{impl core::clone::Clone for core::num::nonzero::private::NonZeroUsizeInner}#26::clone<'_0>(@1: &'_0 (core::num::nonzero::private::NonZeroUsizeInner)) -> core::num::nonzero::private::NonZeroUsizeInner - -impl core::num::nonzero::private::{impl core::clone::Clone for core::num::nonzero::private::NonZeroUsizeInner}#26 : core::clone::Clone -{ - parent_clause0 = core::marker::Sized - fn clone<'_0> = core::num::nonzero::private::{impl core::clone::Clone for core::num::nonzero::private::NonZeroUsizeInner}#26::clone<'_0_0> -} - -impl core::num::nonzero::private::{impl core::marker::Copy for core::num::nonzero::private::NonZeroUsizeInner}#27 : core::marker::Copy -{ - parent_clause0 = core::num::nonzero::private::{impl core::clone::Clone for core::num::nonzero::private::NonZeroUsizeInner}#26 -} - -impl core::num::nonzero::{impl core::num::nonzero::ZeroablePrimitive for usize}#26 : core::num::nonzero::ZeroablePrimitive -{ - parent_clause0 = core::marker::Sized - parent_clause1 = core::marker::{impl core::marker::Copy for usize}#37 - parent_clause2 = core::num::nonzero::{impl core::num::nonzero::private::Sealed for usize}#25 - parent_clause3 = core::num::nonzero::private::{impl core::marker::Copy for core::num::nonzero::private::NonZeroUsizeInner}#27 - parent_clause4 = core::num::nonzero::private::{impl core::clone::Clone for core::num::nonzero::private::NonZeroUsizeInner}#26 - parent_clause5 = core::marker::Sized - type NonZeroInner = core::num::nonzero::private::NonZeroUsizeInner -} - -opaque type core::iter::adapters::step_by::StepBy - where - [@TraitClause0]: core::marker::Sized, - -opaque type core::iter::adapters::chain::Chain - where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::marker::Sized, - -opaque type core::iter::adapters::zip::Zip - where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::marker::Sized, - -trait core::marker::Tuple - -trait core::ops::function::FnOnce -{ - parent_clause0 : [@TraitClause0]: core::marker::Sized - parent_clause1 : [@TraitClause1]: core::marker::Tuple - parent_clause2 : [@TraitClause2]: core::marker::Sized - type Output - fn call_once = core::ops::function::FnOnce::call_once[Self] -} - -trait core::ops::function::FnMut -{ - parent_clause0 : [@TraitClause0]: core::ops::function::FnOnce - parent_clause1 : [@TraitClause1]: core::marker::Sized - parent_clause2 : [@TraitClause2]: core::marker::Tuple - fn call_mut<'_0> = core::ops::function::FnMut::call_mut<'_0_0, Self, Args>[Self] -} - -opaque type core::iter::adapters::map::Map - where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::marker::Sized, - -opaque type core::iter::adapters::filter::Filter - where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::marker::Sized

, - -opaque type core::iter::adapters::filter_map::FilterMap - where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::marker::Sized, - -opaque type core::iter::adapters::enumerate::Enumerate - where - [@TraitClause0]: core::marker::Sized, - -opaque type core::iter::adapters::skip_while::SkipWhile - where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::marker::Sized

, - -opaque type core::iter::adapters::take_while::TakeWhile - where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::marker::Sized

, - -opaque type core::iter::adapters::map_while::MapWhile - where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::marker::Sized

, - -opaque type core::iter::adapters::skip::Skip - where - [@TraitClause0]: core::marker::Sized, - -opaque type core::iter::adapters::take::Take - where - [@TraitClause0]: core::marker::Sized, - -opaque type core::iter::adapters::scan::Scan - where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::marker::Sized, - -opaque type core::iter::adapters::fuse::Fuse - where - [@TraitClause0]: core::marker::Sized, - -opaque type core::iter::adapters::inspect::Inspect - where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::marker::Sized, - -trait core::ops::try_trait::FromResidual -{ - parent_clause0 : [@TraitClause0]: core::marker::Sized - fn from_residual = core::ops::try_trait::FromResidual::from_residual[Self] -} - -enum core::ops::control_flow::ControlFlow - where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::marker::Sized, - = -| Continue(C) -| Break(B) - - -trait core::ops::try_trait::Try -{ - parent_clause0 : [@TraitClause0]: core::ops::try_trait::FromResidual - parent_clause1 : [@TraitClause1]: core::marker::Sized - parent_clause2 : [@TraitClause2]: core::marker::Sized - type Output - type Residual - fn from_output = core::ops::try_trait::Try::from_output[Self] - fn branch = core::ops::try_trait::Try::branch[Self] -} - -trait core::ops::try_trait::Residual -where - Self::parent_clause1::Residual = Self, - Self::parent_clause1::Output = O, -{ - parent_clause0 : [@TraitClause0]: core::marker::Sized - parent_clause1 : [@TraitClause1]: core::ops::try_trait::Try - parent_clause2 : [@TraitClause2]: core::ops::try_trait::FromResidual - parent_clause3 : [@TraitClause3]: core::marker::Sized - type TryType -} - -trait core::default::Default -{ - parent_clause0 : [@TraitClause0]: core::marker::Sized - fn default = core::default::Default::default[Self] -} - -trait core::cmp::PartialEq -{ - fn eq<'_0, '_1> = core::cmp::PartialEq::eq<'_0_0, '_0_1, Self, Rhs>[Self] - fn ne<'_0, '_1> = core::cmp::PartialEq::ne<'_0_0, '_0_1, Self, Rhs>[Self] -} - -trait core::cmp::Eq -{ - parent_clause0 : [@TraitClause0]: core::cmp::PartialEq - fn assert_receiver_is_total_eq<'_0> = core::cmp::Eq::assert_receiver_is_total_eq<'_0_0, Self>[Self] -} - -enum core::cmp::Ordering = -| Less() -| Equal() -| Greater() - - -trait core::cmp::PartialOrd -{ - parent_clause0 : [@TraitClause0]: core::cmp::PartialEq - fn partial_cmp<'_0, '_1> = core::cmp::PartialOrd::partial_cmp<'_0_0, '_0_1, Self, Rhs>[Self] - fn lt<'_0, '_1> = core::cmp::PartialOrd::lt<'_0_0, '_0_1, Self, Rhs>[Self] - fn le<'_0, '_1> = core::cmp::PartialOrd::le<'_0_0, '_0_1, Self, Rhs>[Self] - fn gt<'_0, '_1> = core::cmp::PartialOrd::gt<'_0_0, '_0_1, Self, Rhs>[Self] - fn ge<'_0, '_1> = core::cmp::PartialOrd::ge<'_0_0, '_0_1, Self, Rhs>[Self] -} - -trait core::cmp::Ord -{ - parent_clause0 : [@TraitClause0]: core::cmp::Eq - parent_clause1 : [@TraitClause1]: core::cmp::PartialOrd - fn cmp<'_0, '_1> = core::cmp::Ord::cmp<'_0_0, '_0_1, Self>[Self] - fn max<[@TraitClause0]: core::marker::Sized> = core::cmp::Ord::max[Self, @TraitClause0_0] - fn min<[@TraitClause0]: core::marker::Sized> = core::cmp::Ord::min[Self, @TraitClause0_0] - fn clamp<[@TraitClause0]: core::marker::Sized> = core::cmp::Ord::clamp[Self, @TraitClause0_0] -} - -opaque type core::iter::adapters::rev::Rev - where - [@TraitClause0]: core::marker::Sized, - -opaque type core::iter::adapters::copied::Copied - where - [@TraitClause0]: core::marker::Sized, - -opaque type core::iter::adapters::cloned::Cloned - where - [@TraitClause0]: core::marker::Sized, - -opaque type core::iter::adapters::cycle::Cycle - where - [@TraitClause0]: core::marker::Sized, - -trait core::iter::traits::iterator::Iterator -{ - parent_clause0 : [@TraitClause0]: core::marker::Sized - type Item - fn next<'_0> = core::iter::traits::iterator::Iterator::next<'_0_0, Self>[Self] - fn next_chunk<'_0, const N : usize, [@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::next_chunk<'_0_0, Self, const N : usize>[Self, @TraitClause0_0] - fn size_hint<'_0> = core::iter::traits::iterator::Iterator::size_hint<'_0_0, Self>[Self] - fn count<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::count[Self, @TraitClause0_0] - fn last<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::last[Self, @TraitClause0_0] - fn advance_by<'_0> = core::iter::traits::iterator::Iterator::advance_by<'_0_0, Self>[Self] - fn nth<'_0> = core::iter::traits::iterator::Iterator::nth<'_0_0, Self>[Self] - fn step_by<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::step_by[Self, @TraitClause0_0] - fn chain, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::iter::traits::collect::IntoIterator, @TraitClause1_2::Item = Self::Item> = core::iter::traits::iterator::Iterator::chain[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn zip, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::iter::traits::collect::IntoIterator> = core::iter::traits::iterator::Iterator::zip[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn intersperse<[@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::clone::Clone> = core::iter::traits::iterator::Iterator::intersperse[Self, @TraitClause0_0, @TraitClause0_1] - fn intersperse_with, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::ops::function::FnMut, @TraitClause1_2::parent_clause0::Output = Self::Item> = core::iter::traits::iterator::Iterator::intersperse_with[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn map, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::marker::Sized, [@TraitClause3]: core::ops::function::FnMut, @TraitClause1_3::parent_clause0::Output = B> = core::iter::traits::iterator::Iterator::map[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] - fn for_each, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::ops::function::FnMut, @TraitClause1_2::parent_clause0::Output = ()> = core::iter::traits::iterator::Iterator::for_each[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn filter, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: for<'_0> core::ops::function::FnMut, for<'_0> @TraitClause1_2::parent_clause0::Output = bool> = core::iter::traits::iterator::Iterator::filter[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn filter_map, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::marker::Sized, [@TraitClause3]: core::ops::function::FnMut, @TraitClause1_3::parent_clause0::Output = core::option::Option[@TraitClause1_0]> = core::iter::traits::iterator::Iterator::filter_map[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] - fn enumerate<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::enumerate[Self, @TraitClause0_0] - fn peekable<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::peekable[Self, @TraitClause0_0] - fn skip_while, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: for<'_0> core::ops::function::FnMut, for<'_0> @TraitClause1_2::parent_clause0::Output = bool> = core::iter::traits::iterator::Iterator::skip_while[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn take_while, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: for<'_0> core::ops::function::FnMut, for<'_0> @TraitClause1_2::parent_clause0::Output = bool> = core::iter::traits::iterator::Iterator::take_while[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn map_while, [@TraitClause1]: core::marker::Sized

, [@TraitClause2]: core::marker::Sized, [@TraitClause3]: core::ops::function::FnMut, @TraitClause1_3::parent_clause0::Output = core::option::Option[@TraitClause1_0]> = core::iter::traits::iterator::Iterator::map_while[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] - fn skip<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::skip[Self, @TraitClause0_0] - fn take<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::take[Self, @TraitClause0_0] - fn scan, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::marker::Sized, [@TraitClause3]: core::marker::Sized, [@TraitClause4]: for<'_0> core::ops::function::FnMut, for<'_0> @TraitClause1_4::parent_clause0::Output = core::option::Option[@TraitClause1_1]> = core::iter::traits::iterator::Iterator::scan[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] - fn flat_map, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::marker::Sized, [@TraitClause3]: core::iter::traits::collect::IntoIterator, [@TraitClause4]: core::ops::function::FnMut, @TraitClause1_4::parent_clause0::Output = U> = core::iter::traits::iterator::Iterator::flat_map[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] - fn flatten<[@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::iter::traits::collect::IntoIterator> = core::iter::traits::iterator::Iterator::flatten[Self, @TraitClause0_0, @TraitClause0_1] - fn map_windows, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::marker::Sized, [@TraitClause3]: for<'_0> core::ops::function::FnMut))>, for<'_0> @TraitClause1_3::parent_clause0::Output = R> = core::iter::traits::iterator::Iterator::map_windows[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] - fn fuse<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::fuse[Self, @TraitClause0_0] - fn inspect, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: for<'_0> core::ops::function::FnMut, for<'_0> @TraitClause1_2::parent_clause0::Output = ()> = core::iter::traits::iterator::Iterator::inspect[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn by_ref<'_0, [@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::by_ref<'_0_0, Self>[Self, @TraitClause0_0] - fn collect, [@TraitClause1]: core::iter::traits::collect::FromIterator, [@TraitClause2]: core::marker::Sized> = core::iter::traits::iterator::Iterator::collect[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn try_collect<'_0, B, [@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::ops::try_trait::Try, [@TraitClause3]: core::ops::try_trait::Residual<@TraitClause1_2::Residual, B>, [@TraitClause4]: core::iter::traits::collect::FromIterator> = core::iter::traits::iterator::Iterator::try_collect<'_0_0, Self, B>[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] - fn collect_into<'_0, E, [@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::iter::traits::collect::Extend, [@TraitClause2]: core::marker::Sized> = core::iter::traits::iterator::Iterator::collect_into<'_0_0, Self, E>[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn partition, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::marker::Sized, [@TraitClause3]: core::default::Default, [@TraitClause4]: core::iter::traits::collect::Extend, [@TraitClause5]: for<'_0> core::ops::function::FnMut, for<'_0> @TraitClause1_5::parent_clause0::Output = bool> = core::iter::traits::iterator::Iterator::partition[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4, @TraitClause0_5] - fn partition_in_place<'a, T, P, [@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::marker::Sized

, [@TraitClause2]: core::marker::Sized, [@TraitClause3]: core::iter::traits::double_ended::DoubleEndedIterator, [@TraitClause4]: for<'_0> core::ops::function::FnMut, T : 'a, Self::Item = &'a mut (T), for<'_0> @TraitClause1_4::parent_clause0::Output = bool> = core::iter::traits::iterator::Iterator::partition_in_place<'a, Self, T, P>[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] - fn is_partitioned, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::ops::function::FnMut, @TraitClause1_2::parent_clause0::Output = bool> = core::iter::traits::iterator::Iterator::is_partitioned[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn try_fold<'_0, B, F, R, [@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::marker::Sized, [@TraitClause3]: core::marker::Sized, [@TraitClause4]: core::ops::function::FnMut, [@TraitClause5]: core::ops::try_trait::Try, @TraitClause1_4::parent_clause0::Output = R, @TraitClause1_5::Output = B> = core::iter::traits::iterator::Iterator::try_fold<'_0_0, Self, B, F, R>[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4, @TraitClause0_5] - fn try_for_each<'_0, F, R, [@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::marker::Sized, [@TraitClause3]: core::ops::function::FnMut, [@TraitClause4]: core::ops::try_trait::Try, @TraitClause1_3::parent_clause0::Output = R, @TraitClause1_4::Output = ()> = core::iter::traits::iterator::Iterator::try_for_each<'_0_0, Self, F, R>[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] - fn fold, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::marker::Sized, [@TraitClause3]: core::ops::function::FnMut, @TraitClause1_3::parent_clause0::Output = B> = core::iter::traits::iterator::Iterator::fold[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] - fn reduce, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::ops::function::FnMut, @TraitClause1_2::parent_clause0::Output = Self::Item> = core::iter::traits::iterator::Iterator::reduce[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn try_reduce<'_0, R, impl FnMut(Self::Item, Self::Item) -> R, [@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::marker::Sized R>, [@TraitClause2]: core::marker::Sized, [@TraitClause3]: core::ops::try_trait::Try, [@TraitClause4]: core::ops::try_trait::Residual<@TraitClause1_3::Residual, core::option::Option[Self::parent_clause0]>, [@TraitClause5]: core::ops::function::FnMut R, (Self::Item, Self::Item)>, @TraitClause1_3::Output = Self::Item, @TraitClause1_5::parent_clause0::Output = R> = core::iter::traits::iterator::Iterator::try_reduce<'_0_0, Self, R, impl FnMut(Self::Item, Self::Item) -> R>[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4, @TraitClause0_5] - fn all<'_0, F, [@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::ops::function::FnMut, @TraitClause1_2::parent_clause0::Output = bool> = core::iter::traits::iterator::Iterator::all<'_0_0, Self, F>[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn any<'_0, F, [@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::ops::function::FnMut, @TraitClause1_2::parent_clause0::Output = bool> = core::iter::traits::iterator::Iterator::any<'_0_0, Self, F>[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn find<'_0, P, [@TraitClause0]: core::marker::Sized

, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: for<'_0> core::ops::function::FnMut, for<'_0> @TraitClause1_2::parent_clause0::Output = bool> = core::iter::traits::iterator::Iterator::find<'_0_0, Self, P>[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn find_map<'_0, B, F, [@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::marker::Sized, [@TraitClause3]: core::ops::function::FnMut, @TraitClause1_3::parent_clause0::Output = core::option::Option[@TraitClause1_0]> = core::iter::traits::iterator::Iterator::find_map<'_0_0, Self, B, F>[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] - fn try_find<'_0, R, impl FnMut(&Self::Item) -> R, [@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::marker::Sized R>, [@TraitClause2]: core::marker::Sized, [@TraitClause3]: core::ops::try_trait::Try, [@TraitClause4]: core::ops::try_trait::Residual<@TraitClause1_3::Residual, core::option::Option[Self::parent_clause0]>, [@TraitClause5]: for<'_0> core::ops::function::FnMut R, (&'_0_0 (Self::Item))>, @TraitClause1_3::Output = bool, for<'_0> @TraitClause1_5::parent_clause0::Output = R> = core::iter::traits::iterator::Iterator::try_find<'_0_0, Self, R, impl FnMut(&Self::Item) -> R>[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4, @TraitClause0_5] - fn position<'_0, P, [@TraitClause0]: core::marker::Sized

, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::ops::function::FnMut, @TraitClause1_2::parent_clause0::Output = bool> = core::iter::traits::iterator::Iterator::position<'_0_0, Self, P>[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn rposition<'_0, P, [@TraitClause0]: core::marker::Sized

, [@TraitClause1]: core::ops::function::FnMut, [@TraitClause2]: core::marker::Sized, [@TraitClause3]: core::iter::traits::exact_size::ExactSizeIterator, [@TraitClause4]: core::iter::traits::double_ended::DoubleEndedIterator, @TraitClause1_1::parent_clause0::Output = bool> = core::iter::traits::iterator::Iterator::rposition<'_0_0, Self, P>[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] - fn max<[@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::cmp::Ord> = core::iter::traits::iterator::Iterator::max[Self, @TraitClause0_0, @TraitClause0_1] - fn min<[@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::cmp::Ord> = core::iter::traits::iterator::Iterator::min[Self, @TraitClause0_0, @TraitClause0_1] - fn max_by_key, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::cmp::Ord, [@TraitClause3]: core::marker::Sized, [@TraitClause4]: for<'_0> core::ops::function::FnMut, for<'_0> @TraitClause1_4::parent_clause0::Output = B> = core::iter::traits::iterator::Iterator::max_by_key[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] - fn max_by, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: for<'_0, '_1> core::ops::function::FnMut, for<'_0, '_1> @TraitClause1_2::parent_clause0::Output = core::cmp::Ordering> = core::iter::traits::iterator::Iterator::max_by[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn min_by_key, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::cmp::Ord, [@TraitClause3]: core::marker::Sized, [@TraitClause4]: for<'_0> core::ops::function::FnMut, for<'_0> @TraitClause1_4::parent_clause0::Output = B> = core::iter::traits::iterator::Iterator::min_by_key[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] - fn min_by, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: for<'_0, '_1> core::ops::function::FnMut, for<'_0, '_1> @TraitClause1_2::parent_clause0::Output = core::cmp::Ordering> = core::iter::traits::iterator::Iterator::min_by[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn rev<[@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::iter::traits::double_ended::DoubleEndedIterator> = core::iter::traits::iterator::Iterator::rev[Self, @TraitClause0_0, @TraitClause0_1] - fn unzip, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::marker::Sized, [@TraitClause3]: core::marker::Sized, [@TraitClause4]: core::default::Default, [@TraitClause5]: core::iter::traits::collect::Extend, [@TraitClause6]: core::default::Default, [@TraitClause7]: core::iter::traits::collect::Extend, [@TraitClause8]: core::marker::Sized, [@TraitClause9]: core::iter::traits::iterator::Iterator, Self::Item = (A, B)> = core::iter::traits::iterator::Iterator::unzip[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4, @TraitClause0_5, @TraitClause0_6, @TraitClause0_7, @TraitClause0_8, @TraitClause0_9] - fn copied<'a, T, [@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::iter::traits::iterator::Iterator, [@TraitClause3]: core::marker::Copy, T : 'a, Self::Item = &'a (T)> = core::iter::traits::iterator::Iterator::copied<'a, Self, T>[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] - fn cloned<'a, T, [@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::iter::traits::iterator::Iterator, [@TraitClause3]: core::clone::Clone, T : 'a, Self::Item = &'a (T)> = core::iter::traits::iterator::Iterator::cloned<'a, Self, T>[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] - fn cycle<[@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::clone::Clone> = core::iter::traits::iterator::Iterator::cycle[Self, @TraitClause0_0, @TraitClause0_1] - fn array_chunks> = core::iter::traits::iterator::Iterator::array_chunks[Self, @TraitClause0_0] - fn sum, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::iter::traits::accum::Sum> = core::iter::traits::iterator::Iterator::sum[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn product, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::iter::traits::accum::Product> = core::iter::traits::iterator::Iterator::product[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn cmp, [@TraitClause1]: core::iter::traits::collect::IntoIterator, [@TraitClause2]: core::cmp::Ord, [@TraitClause3]: core::marker::Sized, @TraitClause1_1::Item = Self::Item> = core::iter::traits::iterator::Iterator::cmp[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] - fn cmp_by, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::marker::Sized, [@TraitClause3]: core::iter::traits::collect::IntoIterator, [@TraitClause4]: core::ops::function::FnMut, @TraitClause1_4::parent_clause0::Output = core::cmp::Ordering> = core::iter::traits::iterator::Iterator::cmp_by[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] - fn partial_cmp, [@TraitClause1]: core::iter::traits::collect::IntoIterator, [@TraitClause2]: core::cmp::PartialOrd, [@TraitClause3]: core::marker::Sized> = core::iter::traits::iterator::Iterator::partial_cmp[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] - fn partial_cmp_by, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::marker::Sized, [@TraitClause3]: core::iter::traits::collect::IntoIterator, [@TraitClause4]: core::ops::function::FnMut, @TraitClause1_4::parent_clause0::Output = core::option::Option[core::marker::Sized]> = core::iter::traits::iterator::Iterator::partial_cmp_by[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] - fn eq, [@TraitClause1]: core::iter::traits::collect::IntoIterator, [@TraitClause2]: core::cmp::PartialEq, [@TraitClause3]: core::marker::Sized> = core::iter::traits::iterator::Iterator::eq[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] - fn eq_by, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::marker::Sized, [@TraitClause3]: core::iter::traits::collect::IntoIterator, [@TraitClause4]: core::ops::function::FnMut, @TraitClause1_4::parent_clause0::Output = bool> = core::iter::traits::iterator::Iterator::eq_by[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] - fn ne, [@TraitClause1]: core::iter::traits::collect::IntoIterator, [@TraitClause2]: core::cmp::PartialEq, [@TraitClause3]: core::marker::Sized> = core::iter::traits::iterator::Iterator::ne[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] - fn lt, [@TraitClause1]: core::iter::traits::collect::IntoIterator, [@TraitClause2]: core::cmp::PartialOrd, [@TraitClause3]: core::marker::Sized> = core::iter::traits::iterator::Iterator::lt[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] - fn le, [@TraitClause1]: core::iter::traits::collect::IntoIterator, [@TraitClause2]: core::cmp::PartialOrd, [@TraitClause3]: core::marker::Sized> = core::iter::traits::iterator::Iterator::le[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] - fn gt, [@TraitClause1]: core::iter::traits::collect::IntoIterator, [@TraitClause2]: core::cmp::PartialOrd, [@TraitClause3]: core::marker::Sized> = core::iter::traits::iterator::Iterator::gt[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] - fn ge, [@TraitClause1]: core::iter::traits::collect::IntoIterator, [@TraitClause2]: core::cmp::PartialOrd, [@TraitClause3]: core::marker::Sized> = core::iter::traits::iterator::Iterator::ge[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] - fn is_sorted<[@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::cmp::PartialOrd> = core::iter::traits::iterator::Iterator::is_sorted[Self, @TraitClause0_0, @TraitClause0_1] - fn is_sorted_by, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: for<'_0, '_1> core::ops::function::FnMut, for<'_0, '_1> @TraitClause1_2::parent_clause0::Output = bool> = core::iter::traits::iterator::Iterator::is_sorted_by[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn is_sorted_by_key, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::marker::Sized, [@TraitClause3]: core::ops::function::FnMut, [@TraitClause4]: core::cmp::PartialOrd, @TraitClause1_3::parent_clause0::Output = K> = core::iter::traits::iterator::Iterator::is_sorted_by_key[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] - fn __iterator_get_unchecked<'_0, [@TraitClause0]: core::iter::adapters::zip::TrustedRandomAccessNoCoerce> = core::iter::traits::iterator::Iterator::__iterator_get_unchecked<'_0_0, Self>[Self, @TraitClause0_0] -} - -trait core::iter::traits::collect::IntoIterator -where - Self::parent_clause1::Item = Self::Item, -{ - parent_clause0 : [@TraitClause0]: core::marker::Sized - parent_clause1 : [@TraitClause1]: core::iter::traits::iterator::Iterator - parent_clause2 : [@TraitClause2]: core::marker::Sized - type Item - type IntoIter - fn into_iter = core::iter::traits::collect::IntoIterator::into_iter[Self] -} - -opaque type core::iter::adapters::intersperse::Intersperse - where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::iter::traits::iterator::Iterator, - [@TraitClause2]: core::clone::Clone<@TraitClause1::Item>, - -opaque type core::iter::adapters::intersperse::IntersperseWith - where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::iter::traits::iterator::Iterator, - -opaque type core::iter::adapters::peekable::Peekable - where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::iter::traits::iterator::Iterator, - -opaque type core::iter::adapters::flatten::FlatMap - where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::marker::Sized, - [@TraitClause3]: core::iter::traits::collect::IntoIterator, - -opaque type core::iter::adapters::flatten::Flatten - where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::iter::traits::iterator::Iterator, - [@TraitClause2]: core::iter::traits::collect::IntoIterator<@TraitClause1::Item>, - -opaque type core::iter::adapters::map_windows::MapWindows - where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::iter::traits::iterator::Iterator, - -trait core::iter::traits::collect::FromIterator -{ - parent_clause0 : [@TraitClause0]: core::marker::Sized - parent_clause1 : [@TraitClause1]: core::marker::Sized - fn from_iter, [@TraitClause1]: core::iter::traits::collect::IntoIterator, @TraitClause1_1::Item = A> = core::iter::traits::collect::FromIterator::from_iter[Self, @TraitClause0_0, @TraitClause0_1] -} - -trait core::iter::traits::collect::Extend -{ - parent_clause0 : [@TraitClause0]: core::marker::Sized - fn extend<'_0, T, [@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::iter::traits::collect::IntoIterator, @TraitClause1_1::Item = A> = core::iter::traits::collect::Extend::extend<'_0_0, Self, A, T>[Self, @TraitClause0_0, @TraitClause0_1] - fn extend_one<'_0> = core::iter::traits::collect::Extend::extend_one<'_0_0, Self, A>[Self] - fn extend_reserve<'_0> = core::iter::traits::collect::Extend::extend_reserve<'_0_0, Self, A>[Self] - fn extend_one_unchecked<'_0, [@TraitClause0]: core::marker::Sized> = core::iter::traits::collect::Extend::extend_one_unchecked<'_0_0, Self, A>[Self, @TraitClause0_0] -} - -trait core::iter::traits::double_ended::DoubleEndedIterator -{ - parent_clause0 : [@TraitClause0]: core::iter::traits::iterator::Iterator - fn next_back<'_0> = core::iter::traits::double_ended::DoubleEndedIterator::next_back<'_0_0, Self>[Self] - fn advance_back_by<'_0> = core::iter::traits::double_ended::DoubleEndedIterator::advance_back_by<'_0_0, Self>[Self] - fn nth_back<'_0> = core::iter::traits::double_ended::DoubleEndedIterator::nth_back<'_0_0, Self>[Self] - fn try_rfold<'_0, B, F, R, [@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::marker::Sized, [@TraitClause3]: core::marker::Sized, [@TraitClause4]: core::ops::function::FnMut, [@TraitClause5]: core::ops::try_trait::Try, @TraitClause1_4::parent_clause0::Output = R, @TraitClause1_5::Output = B> = core::iter::traits::double_ended::DoubleEndedIterator::try_rfold<'_0_0, Self, B, F, R>[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4, @TraitClause0_5] - fn rfold, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::marker::Sized, [@TraitClause3]: core::ops::function::FnMut, @TraitClause1_3::parent_clause0::Output = B> = core::iter::traits::double_ended::DoubleEndedIterator::rfold[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] - fn rfind<'_0, P, [@TraitClause0]: core::marker::Sized

, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: for<'_0> core::ops::function::FnMut, for<'_0> @TraitClause1_2::parent_clause0::Output = bool> = core::iter::traits::double_ended::DoubleEndedIterator::rfind<'_0_0, Self, P>[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] -} - -trait core::iter::traits::exact_size::ExactSizeIterator -{ - parent_clause0 : [@TraitClause0]: core::iter::traits::iterator::Iterator - fn len<'_0> = core::iter::traits::exact_size::ExactSizeIterator::len<'_0_0, Self>[Self] - fn is_empty<'_0> = core::iter::traits::exact_size::ExactSizeIterator::is_empty<'_0_0, Self>[Self] -} - -opaque type core::iter::adapters::array_chunks::ArrayChunks - where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::iter::traits::iterator::Iterator, - -trait core::iter::traits::accum::Sum -{ - parent_clause0 : [@TraitClause0]: core::marker::Sized - parent_clause1 : [@TraitClause1]: core::marker::Sized - fn sum, [@TraitClause1]: core::iter::traits::iterator::Iterator, @TraitClause1_1::Item = A> = core::iter::traits::accum::Sum::sum[Self, @TraitClause0_0, @TraitClause0_1] -} - -trait core::iter::traits::accum::Product -{ - parent_clause0 : [@TraitClause0]: core::marker::Sized - parent_clause1 : [@TraitClause1]: core::marker::Sized - fn product, [@TraitClause1]: core::iter::traits::iterator::Iterator, @TraitClause1_1::Item = A> = core::iter::traits::accum::Product::product[Self, @TraitClause0_0, @TraitClause0_1] -} - -trait core::iter::adapters::zip::TrustedRandomAccessNoCoerce -{ - parent_clause0 : [@TraitClause0]: core::marker::Sized - const MAY_HAVE_SIDE_EFFECT : bool - fn size<'_0, [@TraitClause0]: core::iter::traits::iterator::Iterator> = core::iter::adapters::zip::TrustedRandomAccessNoCoerce::size<'_0_0, Self>[Self, @TraitClause0_0] -} - -fn core::array::iter::{impl core::iter::traits::collect::IntoIterator for Array}::into_iter(@1: Array) -> core::array::iter::{impl core::iter::traits::collect::IntoIterator for Array}[@TraitClause0]::IntoIter -where - [@TraitClause0]: core::marker::Sized, - -fn core::iter::traits::collect::{impl core::iter::traits::collect::IntoIterator for I}#1::into_iter(@1: I) -> I -where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::iter::traits::iterator::Iterator, - -fn core::array::iter::{impl core::iter::traits::iterator::Iterator for core::array::iter::IntoIter[@TraitClause0]}#2::next<'_0, T, const N : usize>(@1: &'_0 mut (core::array::iter::IntoIter[@TraitClause0])) -> core::option::Option[@TraitClause0]}#2[@TraitClause0]::Item>[@TraitClause0] -where - [@TraitClause0]: core::marker::Sized, - -fn core::array::iter::{impl core::iter::traits::iterator::Iterator for core::array::iter::IntoIter[@TraitClause0]}#2::size_hint<'_0, T, const N : usize>(@1: &'_0 (core::array::iter::IntoIter[@TraitClause0])) -> (usize, core::option::Option[core::marker::Sized]) -where - [@TraitClause0]: core::marker::Sized, - -fn core::array::iter::{impl core::iter::traits::iterator::Iterator for core::array::iter::IntoIter[@TraitClause0]}#2::count(@1: core::array::iter::IntoIter[@TraitClause0]) -> usize -where - [@TraitClause0]: core::marker::Sized, - -fn core::array::iter::{impl core::iter::traits::iterator::Iterator for core::array::iter::IntoIter[@TraitClause0]}#2::last(@1: core::array::iter::IntoIter[@TraitClause0]) -> core::option::Option[@TraitClause0]}#2[@TraitClause0]::Item>[@TraitClause0] -where - [@TraitClause0]: core::marker::Sized, - -fn core::array::iter::{impl core::iter::traits::iterator::Iterator for core::array::iter::IntoIter[@TraitClause0]}#2::advance_by<'_0, T, const N : usize>(@1: &'_0 mut (core::array::iter::IntoIter[@TraitClause0]), @2: usize) -> core::result::Result<(), core::num::nonzero::NonZero[core::marker::Sized, core::num::nonzero::{impl core::num::nonzero::ZeroablePrimitive for usize}#26]>[core::marker::Sized<()>, core::marker::Sized[core::marker::Sized, core::num::nonzero::{impl core::num::nonzero::ZeroablePrimitive for usize}#26]>] -where - [@TraitClause0]: core::marker::Sized, - -fn core::array::iter::{impl core::iter::traits::iterator::Iterator for core::array::iter::IntoIter[@TraitClause0]}#2::fold(@1: core::array::iter::IntoIter[@TraitClause0], @2: Acc, @3: Fold) -> Acc -where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::marker::Sized, - [@TraitClause3]: core::ops::function::FnMut, - @TraitClause3::parent_clause0::Output = Acc, - -unsafe fn core::array::iter::{impl core::iter::traits::iterator::Iterator for core::array::iter::IntoIter[@TraitClause0]}#2::__iterator_get_unchecked<'_0, T, const N : usize>(@1: &'_0 mut (core::array::iter::IntoIter[@TraitClause0]), @2: usize) -> core::array::iter::{impl core::iter::traits::iterator::Iterator for core::array::iter::IntoIter[@TraitClause0]}#2[@TraitClause0]::Item -where - [@TraitClause0]: core::marker::Sized, - -impl core::array::iter::{impl core::iter::traits::iterator::Iterator for core::array::iter::IntoIter[@TraitClause0]}#2 : core::iter::traits::iterator::Iterator[@TraitClause0]> -where - [@TraitClause0]: core::marker::Sized, -{ - parent_clause0 = @TraitClause0 - type Item = T - fn next<'_0> = core::array::iter::{impl core::iter::traits::iterator::Iterator for core::array::iter::IntoIter[@TraitClause0]}#2::next<'_0_0, T, const N : usize>[@TraitClause0] - fn size_hint<'_0> = core::array::iter::{impl core::iter::traits::iterator::Iterator for core::array::iter::IntoIter[@TraitClause0]}#2::size_hint<'_0_0, T, const N : usize>[@TraitClause0] - fn count = core::array::iter::{impl core::iter::traits::iterator::Iterator for core::array::iter::IntoIter[@TraitClause0]}#2::count[@TraitClause0] - fn last = core::array::iter::{impl core::iter::traits::iterator::Iterator for core::array::iter::IntoIter[@TraitClause0]}#2::last[@TraitClause0] - fn advance_by<'_0> = core::array::iter::{impl core::iter::traits::iterator::Iterator for core::array::iter::IntoIter[@TraitClause0]}#2::advance_by<'_0_0, T, const N : usize>[@TraitClause0] - fn fold, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::ops::function::FnMut, @TraitClause1_2::parent_clause0::Output = Acc> = core::array::iter::{impl core::iter::traits::iterator::Iterator for core::array::iter::IntoIter[@TraitClause0]}#2::fold[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn __iterator_get_unchecked<'_0> = core::array::iter::{impl core::iter::traits::iterator::Iterator for core::array::iter::IntoIter[@TraitClause0]}#2::__iterator_get_unchecked<'_0_0, T, const N : usize>[@TraitClause0] -} - -fn core::slice::{Slice}::iter<'_0, T>(@1: &'_0 (Slice)) -> core::slice::iter::Iter<'_0, T>[@TraitClause0] -where - [@TraitClause0]: core::marker::Sized, - -fn core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::next<'a, '_1, T>(@1: &'_1 mut (core::slice::iter::Iter<'a, T>[@TraitClause0])) -> core::option::Option<&'a (T)>[core::marker::Sized<&'_ (T)>] -where - [@TraitClause0]: core::marker::Sized, - -fn core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::size_hint<'a, '_1, T>(@1: &'_1 (core::slice::iter::Iter<'a, T>[@TraitClause0])) -> (usize, core::option::Option[core::marker::Sized]) -where - [@TraitClause0]: core::marker::Sized, - -fn core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::count<'a, T>(@1: core::slice::iter::Iter<'a, T>[@TraitClause0]) -> usize -where - [@TraitClause0]: core::marker::Sized, - -fn core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::last<'a, T>(@1: core::slice::iter::Iter<'a, T>[@TraitClause0]) -> core::option::Option<&'a (T)>[core::marker::Sized<&'_ (T)>] -where - [@TraitClause0]: core::marker::Sized, - -fn core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::advance_by<'a, '_1, T>(@1: &'_1 mut (core::slice::iter::Iter<'a, T>[@TraitClause0]), @2: usize) -> core::result::Result<(), core::num::nonzero::NonZero[core::marker::Sized, core::num::nonzero::{impl core::num::nonzero::ZeroablePrimitive for usize}#26]>[core::marker::Sized<()>, core::marker::Sized[core::marker::Sized, core::num::nonzero::{impl core::num::nonzero::ZeroablePrimitive for usize}#26]>] -where - [@TraitClause0]: core::marker::Sized, - -fn core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::nth<'a, '_1, T>(@1: &'_1 mut (core::slice::iter::Iter<'a, T>[@TraitClause0]), @2: usize) -> core::option::Option<&'a (T)>[core::marker::Sized<&'_ (T)>] -where - [@TraitClause0]: core::marker::Sized, - -fn core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::for_each<'a, T, F>(@1: core::slice::iter::Iter<'a, T>[@TraitClause0], @2: F) -where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::marker::Sized[@TraitClause0]>, - [@TraitClause3]: core::ops::function::FnMut, - @TraitClause3::parent_clause0::Output = (), - -fn core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::fold<'a, T, B, F>(@1: core::slice::iter::Iter<'a, T>[@TraitClause0], @2: B, @3: F) -> B -where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::marker::Sized, - [@TraitClause3]: core::ops::function::FnMut, - @TraitClause3::parent_clause0::Output = B, - -fn core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::all<'a, '_1, T, F>(@1: &'_1 mut (core::slice::iter::Iter<'a, T>[@TraitClause0]), @2: F) -> bool -where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::marker::Sized[@TraitClause0]>, - [@TraitClause3]: core::ops::function::FnMut, - @TraitClause3::parent_clause0::Output = bool, - -fn core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::any<'a, '_1, T, F>(@1: &'_1 mut (core::slice::iter::Iter<'a, T>[@TraitClause0]), @2: F) -> bool -where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::marker::Sized[@TraitClause0]>, - [@TraitClause3]: core::ops::function::FnMut, - @TraitClause3::parent_clause0::Output = bool, - -fn core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::find<'a, '_1, T, P>(@1: &'_1 mut (core::slice::iter::Iter<'a, T>[@TraitClause0]), @2: P) -> core::option::Option[@TraitClause0]}#182<'_, T>[@TraitClause0]::Item>[core::marker::Sized<&'_ (T)>] -where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::marker::Sized

, - [@TraitClause2]: core::marker::Sized[@TraitClause0]>, - [@TraitClause3]: for<'_0> core::ops::function::FnMut, - for<'_0> @TraitClause3::parent_clause0::Output = bool, - -fn core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::find_map<'a, '_1, T, B, F>(@1: &'_1 mut (core::slice::iter::Iter<'a, T>[@TraitClause0]), @2: F) -> core::option::Option[@TraitClause1] -where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::marker::Sized, - [@TraitClause3]: core::marker::Sized[@TraitClause0]>, - [@TraitClause4]: core::ops::function::FnMut, - @TraitClause4::parent_clause0::Output = core::option::Option[@TraitClause1], - -fn core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::position<'a, '_1, T, P>(@1: &'_1 mut (core::slice::iter::Iter<'a, T>[@TraitClause0]), @2: P) -> core::option::Option[core::marker::Sized] -where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::marker::Sized

, - [@TraitClause2]: core::marker::Sized[@TraitClause0]>, - [@TraitClause3]: core::ops::function::FnMut, - @TraitClause3::parent_clause0::Output = bool, - -fn core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::rposition<'a, '_1, T, P>(@1: &'_1 mut (core::slice::iter::Iter<'a, T>[@TraitClause0]), @2: P) -> core::option::Option[core::marker::Sized] -where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::marker::Sized

, - [@TraitClause2]: core::ops::function::FnMut, - [@TraitClause3]: core::marker::Sized[@TraitClause0]>, - [@TraitClause4]: core::iter::traits::exact_size::ExactSizeIterator[@TraitClause0]>, - [@TraitClause5]: core::iter::traits::double_ended::DoubleEndedIterator[@TraitClause0]>, - @TraitClause2::parent_clause0::Output = bool, - -fn core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::is_sorted_by<'a, T, F>(@1: core::slice::iter::Iter<'a, T>[@TraitClause0], @2: F) -> bool -where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::marker::Sized[@TraitClause0]>, - [@TraitClause3]: for<'_0, '_1> core::ops::function::FnMut, - for<'_0, '_1> @TraitClause3::parent_clause0::Output = bool, - -unsafe fn core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::__iterator_get_unchecked<'a, '_1, T>(@1: &'_1 mut (core::slice::iter::Iter<'a, T>[@TraitClause0]), @2: usize) -> core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182<'_, T>[@TraitClause0]::Item -where - [@TraitClause0]: core::marker::Sized, - -impl<'a, T> core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182<'a, T> : core::iter::traits::iterator::Iterator[@TraitClause0]> -where - [@TraitClause0]: core::marker::Sized, -{ - parent_clause0 = core::marker::Sized<&'_ (T)> - type Item = &'a (T) - fn next<'_0> = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::next<'a, '_0_0, T>[@TraitClause0] - fn size_hint<'_0> = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::size_hint<'a, '_0_0, T>[@TraitClause0] - fn count = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::count<'a, T>[@TraitClause0] - fn last = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::last<'a, T>[@TraitClause0] - fn advance_by<'_0> = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::advance_by<'a, '_0_0, T>[@TraitClause0] - fn nth<'_0> = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::nth<'a, '_0_0, T>[@TraitClause0] - fn for_each, [@TraitClause1]: core::marker::Sized[@TraitClause0]>, [@TraitClause2]: core::ops::function::FnMut, @TraitClause1_2::parent_clause0::Output = ()> = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::for_each<'a, T, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn fold, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::ops::function::FnMut, @TraitClause1_2::parent_clause0::Output = B> = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::fold<'a, T, B, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn all<'_0, F, [@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::marker::Sized[@TraitClause0]>, [@TraitClause2]: core::ops::function::FnMut, @TraitClause1_2::parent_clause0::Output = bool> = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::all<'a, '_0_0, T, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn any<'_0, F, [@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::marker::Sized[@TraitClause0]>, [@TraitClause2]: core::ops::function::FnMut, @TraitClause1_2::parent_clause0::Output = bool> = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::any<'a, '_0_0, T, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn find<'_0, P, [@TraitClause0]: core::marker::Sized

, [@TraitClause1]: core::marker::Sized[@TraitClause0]>, [@TraitClause2]: for<'_0> core::ops::function::FnMut, for<'_0> @TraitClause1_2::parent_clause0::Output = bool> = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::find<'a, '_0_0, T, P>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn find_map<'_0, B, F, [@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::marker::Sized[@TraitClause0]>, [@TraitClause3]: core::ops::function::FnMut, @TraitClause1_3::parent_clause0::Output = core::option::Option[@TraitClause1_0]> = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::find_map<'a, '_0_0, T, B, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] - fn position<'_0, P, [@TraitClause0]: core::marker::Sized

, [@TraitClause1]: core::marker::Sized[@TraitClause0]>, [@TraitClause2]: core::ops::function::FnMut, @TraitClause1_2::parent_clause0::Output = bool> = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::position<'a, '_0_0, T, P>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn rposition<'_0, P, [@TraitClause0]: core::marker::Sized

, [@TraitClause1]: core::ops::function::FnMut, [@TraitClause2]: core::marker::Sized[@TraitClause0]>, [@TraitClause3]: core::iter::traits::exact_size::ExactSizeIterator[@TraitClause0]>, [@TraitClause4]: core::iter::traits::double_ended::DoubleEndedIterator[@TraitClause0]>, @TraitClause1_1::parent_clause0::Output = bool> = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::rposition<'a, '_0_0, T, P>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] - fn is_sorted_by, [@TraitClause1]: core::marker::Sized[@TraitClause0]>, [@TraitClause2]: for<'_0, '_1> core::ops::function::FnMut, for<'_0, '_1> @TraitClause1_2::parent_clause0::Output = bool> = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::is_sorted_by<'a, T, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn __iterator_get_unchecked<'_0> = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::__iterator_get_unchecked<'a, '_0_0, T>[@TraitClause0] -} - -fn core::ops::arith::{impl core::ops::arith::AddAssign<&'_0 (i32)> for i32}#365::add_assign<'_0, '_1>(@1: &'_1 mut (i32), @2: &'_0 (i32)) - -fn core::slice::{Slice}::chunks<'_0, T>(@1: &'_0 (Slice), @2: usize) -> core::slice::iter::Chunks<'_0, T>[@TraitClause0] -where - [@TraitClause0]: core::marker::Sized, - -fn core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Chunks<'a, T>[@TraitClause0]}#71::next<'a, '_1, T>(@1: &'_1 mut (core::slice::iter::Chunks<'a, T>[@TraitClause0])) -> core::option::Option<&'a (Slice)>[core::marker::Sized<&'_ (Slice)>] -where - [@TraitClause0]: core::marker::Sized, - -fn core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Chunks<'a, T>[@TraitClause0]}#71::size_hint<'a, '_1, T>(@1: &'_1 (core::slice::iter::Chunks<'a, T>[@TraitClause0])) -> (usize, core::option::Option[core::marker::Sized]) -where - [@TraitClause0]: core::marker::Sized, - -fn core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Chunks<'a, T>[@TraitClause0]}#71::count<'a, T>(@1: core::slice::iter::Chunks<'a, T>[@TraitClause0]) -> usize -where - [@TraitClause0]: core::marker::Sized, - -fn core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Chunks<'a, T>[@TraitClause0]}#71::last<'a, T>(@1: core::slice::iter::Chunks<'a, T>[@TraitClause0]) -> core::option::Option[@TraitClause0]}#71<'_, T>[@TraitClause0]::Item>[core::marker::Sized<&'_ (Slice)>] -where - [@TraitClause0]: core::marker::Sized, - -fn core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Chunks<'a, T>[@TraitClause0]}#71::nth<'a, '_1, T>(@1: &'_1 mut (core::slice::iter::Chunks<'a, T>[@TraitClause0]), @2: usize) -> core::option::Option[@TraitClause0]}#71<'_, T>[@TraitClause0]::Item>[core::marker::Sized<&'_ (Slice)>] -where - [@TraitClause0]: core::marker::Sized, - -unsafe fn core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Chunks<'a, T>[@TraitClause0]}#71::__iterator_get_unchecked<'a, '_1, T>(@1: &'_1 mut (core::slice::iter::Chunks<'a, T>[@TraitClause0]), @2: usize) -> core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Chunks<'a, T>[@TraitClause0]}#71<'_, T>[@TraitClause0]::Item -where - [@TraitClause0]: core::marker::Sized, - -impl<'a, T> core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Chunks<'a, T>[@TraitClause0]}#71<'a, T> : core::iter::traits::iterator::Iterator[@TraitClause0]> -where - [@TraitClause0]: core::marker::Sized, -{ - parent_clause0 = core::marker::Sized<&'_ (Slice)> - type Item = &'a (Slice) - fn next<'_0> = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Chunks<'a, T>[@TraitClause0]}#71::next<'a, '_0_0, T>[@TraitClause0] - fn size_hint<'_0> = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Chunks<'a, T>[@TraitClause0]}#71::size_hint<'a, '_0_0, T>[@TraitClause0] - fn count = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Chunks<'a, T>[@TraitClause0]}#71::count<'a, T>[@TraitClause0] - fn last = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Chunks<'a, T>[@TraitClause0]}#71::last<'a, T>[@TraitClause0] - fn nth<'_0> = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Chunks<'a, T>[@TraitClause0]}#71::nth<'a, '_0_0, T>[@TraitClause0] - fn __iterator_get_unchecked<'_0> = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Chunks<'a, T>[@TraitClause0]}#71::__iterator_get_unchecked<'a, '_0_0, T>[@TraitClause0] -} - -fn core::slice::{Slice}::chunks_exact<'_0, T>(@1: &'_0 (Slice), @2: usize) -> core::slice::iter::ChunksExact<'_0, T>[@TraitClause0] -where - [@TraitClause0]: core::marker::Sized, - -fn core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::ChunksExact<'a, T>[@TraitClause0]}#90::next<'a, '_1, T>(@1: &'_1 mut (core::slice::iter::ChunksExact<'a, T>[@TraitClause0])) -> core::option::Option<&'a (Slice)>[core::marker::Sized<&'_ (Slice)>] -where - [@TraitClause0]: core::marker::Sized, - -fn core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::ChunksExact<'a, T>[@TraitClause0]}#90::size_hint<'a, '_1, T>(@1: &'_1 (core::slice::iter::ChunksExact<'a, T>[@TraitClause0])) -> (usize, core::option::Option[core::marker::Sized]) -where - [@TraitClause0]: core::marker::Sized, - -fn core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::ChunksExact<'a, T>[@TraitClause0]}#90::count<'a, T>(@1: core::slice::iter::ChunksExact<'a, T>[@TraitClause0]) -> usize -where - [@TraitClause0]: core::marker::Sized, - -fn core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::ChunksExact<'a, T>[@TraitClause0]}#90::last<'a, T>(@1: core::slice::iter::ChunksExact<'a, T>[@TraitClause0]) -> core::option::Option[@TraitClause0]}#90<'_, T>[@TraitClause0]::Item>[core::marker::Sized<&'_ (Slice)>] -where - [@TraitClause0]: core::marker::Sized, - -fn core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::ChunksExact<'a, T>[@TraitClause0]}#90::nth<'a, '_1, T>(@1: &'_1 mut (core::slice::iter::ChunksExact<'a, T>[@TraitClause0]), @2: usize) -> core::option::Option[@TraitClause0]}#90<'_, T>[@TraitClause0]::Item>[core::marker::Sized<&'_ (Slice)>] -where - [@TraitClause0]: core::marker::Sized, - -unsafe fn core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::ChunksExact<'a, T>[@TraitClause0]}#90::__iterator_get_unchecked<'a, '_1, T>(@1: &'_1 mut (core::slice::iter::ChunksExact<'a, T>[@TraitClause0]), @2: usize) -> core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::ChunksExact<'a, T>[@TraitClause0]}#90<'_, T>[@TraitClause0]::Item -where - [@TraitClause0]: core::marker::Sized, - -impl<'a, T> core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::ChunksExact<'a, T>[@TraitClause0]}#90<'a, T> : core::iter::traits::iterator::Iterator[@TraitClause0]> -where - [@TraitClause0]: core::marker::Sized, -{ - parent_clause0 = core::marker::Sized<&'_ (Slice)> - type Item = &'a (Slice) - fn next<'_0> = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::ChunksExact<'a, T>[@TraitClause0]}#90::next<'a, '_0_0, T>[@TraitClause0] - fn size_hint<'_0> = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::ChunksExact<'a, T>[@TraitClause0]}#90::size_hint<'a, '_0_0, T>[@TraitClause0] - fn count = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::ChunksExact<'a, T>[@TraitClause0]}#90::count<'a, T>[@TraitClause0] - fn last = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::ChunksExact<'a, T>[@TraitClause0]}#90::last<'a, T>[@TraitClause0] - fn nth<'_0> = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::ChunksExact<'a, T>[@TraitClause0]}#90::nth<'a, '_0_0, T>[@TraitClause0] - fn __iterator_get_unchecked<'_0> = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::ChunksExact<'a, T>[@TraitClause0]}#90::__iterator_get_unchecked<'a, '_0_0, T>[@TraitClause0] -} - -fn test_crate::main() -{ - let @0: (); // return - let a@1: Array; // local - let i@2: i32; // local - let @3: (); // anonymous local - let @4: core::array::iter::IntoIter[core::marker::Sized]; // anonymous local - let @5: core::array::iter::IntoIter[core::marker::Sized]; // anonymous local - let @6: Array; // anonymous local - let iter@7: core::array::iter::IntoIter[core::marker::Sized]; // local - let @8: (); // anonymous local - let @9: (); // anonymous local - let @10: core::option::Option[core::marker::Sized]; // anonymous local - let @11: &'_ mut (core::array::iter::IntoIter[core::marker::Sized]); // anonymous local - let @12: &'_ mut (core::array::iter::IntoIter[core::marker::Sized]); // anonymous local - let v@13: i32; // local - let @14: i32; // anonymous local - let @15: (); // anonymous local - let @16: core::slice::iter::Iter<'_, i32>[core::marker::Sized]; // anonymous local - let @17: core::slice::iter::Iter<'_, i32>[core::marker::Sized]; // anonymous local - let @18: &'_ (Slice); // anonymous local - let @19: &'_ (Array); // anonymous local - let iter@20: core::slice::iter::Iter<'_, i32>[core::marker::Sized]; // local - let @21: (); // anonymous local - let @22: core::option::Option<&'_ (i32)>[core::marker::Sized<&'_ (i32)>]; // anonymous local - let @23: &'_ mut (core::slice::iter::Iter<'_, i32>[core::marker::Sized]); // anonymous local - let @24: &'_ mut (core::slice::iter::Iter<'_, i32>[core::marker::Sized]); // anonymous local - let v@25: &'_ (i32); // local - let @26: (); // anonymous local - let @27: &'_ mut (i32); // anonymous local - let @28: &'_ (i32); // anonymous local - let @29: (); // anonymous local - let @30: core::slice::iter::Chunks<'_, i32>[core::marker::Sized]; // anonymous local - let @31: core::slice::iter::Chunks<'_, i32>[core::marker::Sized]; // anonymous local - let @32: &'_ (Slice); // anonymous local - let @33: &'_ (Array); // anonymous local - let iter@34: core::slice::iter::Chunks<'_, i32>[core::marker::Sized]; // local - let @35: (); // anonymous local - let @36: core::option::Option<&'_ (Slice)>[core::marker::Sized<&'_ (Slice)>]; // anonymous local - let @37: &'_ mut (core::slice::iter::Chunks<'_, i32>[core::marker::Sized]); // anonymous local - let @38: &'_ mut (core::slice::iter::Chunks<'_, i32>[core::marker::Sized]); // anonymous local - let @39: (); // anonymous local - let @40: core::slice::iter::ChunksExact<'_, i32>[core::marker::Sized]; // anonymous local - let @41: core::slice::iter::ChunksExact<'_, i32>[core::marker::Sized]; // anonymous local - let @42: &'_ (Slice); // anonymous local - let @43: &'_ (Array); // anonymous local - let iter@44: core::slice::iter::ChunksExact<'_, i32>[core::marker::Sized]; // local - let @45: (); // anonymous local - let @46: core::option::Option<&'_ (Slice)>[core::marker::Sized<&'_ (Slice)>]; // anonymous local - let @47: &'_ mut (core::slice::iter::ChunksExact<'_, i32>[core::marker::Sized]); // anonymous local - let @48: &'_ mut (core::slice::iter::ChunksExact<'_, i32>[core::marker::Sized]); // anonymous local - let expected@49: i32; // local - let @50: (); // anonymous local - let @51: (&'_ (i32), &'_ (i32)); // anonymous local - let @52: &'_ (i32); // anonymous local - let @53: &'_ (i32); // anonymous local - let left_val@54: &'_ (i32); // local - let right_val@55: &'_ (i32); // local - let @56: bool; // anonymous local - let @57: i32; // anonymous local - let @58: i32; // anonymous local - let kind@59: core::panicking::AssertKind; // local - let @60: core::panicking::AssertKind; // anonymous local - let @61: &'_ (i32); // anonymous local - let @62: &'_ (i32); // anonymous local - let @63: &'_ (i32); // anonymous local - let @64: &'_ (i32); // anonymous local - let @65: core::option::Option>[core::marker::Sized>]; // anonymous local - let @66: (); // anonymous local - let @67: (); // anonymous local - let @68: (); // anonymous local - let @69: (); // anonymous local - let @70: (); // anonymous local - let @71: (); // anonymous local - let @72: (); // anonymous local - let @73: (); // anonymous local - let @74: (); // anonymous local - let @75: (); // anonymous local - let @76: (); // anonymous local - let @77: (); // anonymous local - let @78: (); // anonymous local - let @79: (); // anonymous local - - a@1 := [const (0 : i32), const (1 : i32), const (2 : i32), const (3 : i32), const (4 : i32), const (5 : i32), const (6 : i32); 7 : usize] - @fake_read(a@1) - i@2 := const (0 : i32) - @fake_read(i@2) - @6 := copy (a@1) - @5 := core::array::iter::{impl core::iter::traits::collect::IntoIterator for Array}::into_iter[core::marker::Sized](move (@6)) - drop @6 - @4 := core::iter::traits::collect::{impl core::iter::traits::collect::IntoIterator for I}#1::into_iter[core::marker::Sized]>[core::marker::Sized[core::marker::Sized]>, core::array::iter::{impl core::iter::traits::iterator::Iterator for core::array::iter::IntoIter[@TraitClause0]}#2[core::marker::Sized]](move (@5)) - drop @5 - @fake_read(@4) - iter@7 := move (@4) - loop { - @12 := &mut iter@7 - @11 := &two-phase-mut *(@12) - @10 := core::array::iter::{impl core::iter::traits::iterator::Iterator for core::array::iter::IntoIter[@TraitClause0]}#2::next<'_, i32, 7 : usize>[core::marker::Sized](move (@11)) - drop @11 - @fake_read(@10) - match @10 { - 0 => { - break 0 - }, - 1 => { - v@13 := copy ((@10 as variant @1).0) - @14 := copy (v@13) - i@2 := copy (i@2) + move (@14) - drop @14 - @67 := () - @9 := move (@67) - drop v@13 - drop @12 - drop @10 - drop @9 - @68 := () - @8 := move (@68) - continue 0 - }, - } - } - @66 := () - @3 := move (@66) - drop @12 - drop @10 - drop @9 - drop iter@7 - drop iter@7 - drop @4 - drop @4 - drop @3 - @19 := &a@1 - @18 := @ArrayToSliceShared<'_, i32, 7 : usize>(move (@19)) - drop @19 - @17 := core::slice::{Slice}::iter<'_, i32>[core::marker::Sized](move (@18)) - drop @18 - @16 := core::iter::traits::collect::{impl core::iter::traits::collect::IntoIterator for I}#1::into_iter[core::marker::Sized]>[core::marker::Sized[core::marker::Sized]>, core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182<'_, i32>[core::marker::Sized]](move (@17)) - drop @17 - @fake_read(@16) - iter@20 := move (@16) - loop { - @24 := &mut iter@20 - @23 := &two-phase-mut *(@24) - @22 := core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::next<'_, '_, i32>[core::marker::Sized](move (@23)) - drop @23 - @fake_read(@22) - match @22 { - 0 => { - break 0 - }, - 1 => { - v@25 := copy ((@22 as variant @1).0) - @27 := &two-phase-mut i@2 - @28 := copy (v@25) - @26 := core::ops::arith::{impl core::ops::arith::AddAssign<&'_0 (i32)> for i32}#365::add_assign<'_, '_>(move (@27), move (@28)) - drop @28 - drop @27 - drop @26 - @70 := () - @21 := move (@70) - drop v@25 - drop @24 - drop @22 - drop @21 - @71 := () - @8 := move (@71) - continue 0 - }, - } - } - @69 := () - @15 := move (@69) - drop @24 - drop @22 - drop @21 - drop iter@20 - drop @16 - drop @15 - @33 := &a@1 - @32 := @ArrayToSliceShared<'_, i32, 7 : usize>(move (@33)) - drop @33 - @31 := core::slice::{Slice}::chunks<'_, i32>[core::marker::Sized](move (@32), const (2 : usize)) - drop @32 - @30 := core::iter::traits::collect::{impl core::iter::traits::collect::IntoIterator for I}#1::into_iter[core::marker::Sized]>[core::marker::Sized[core::marker::Sized]>, core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Chunks<'a, T>[@TraitClause0]}#71<'_, i32>[core::marker::Sized]](move (@31)) - drop @31 - @fake_read(@30) - iter@34 := move (@30) - loop { - @38 := &mut iter@34 - @37 := &two-phase-mut *(@38) - @36 := core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Chunks<'a, T>[@TraitClause0]}#71::next<'_, '_, i32>[core::marker::Sized](move (@37)) - drop @37 - @fake_read(@36) - match @36 { - 0 => { - break 0 - }, - 1 => { - i@2 := copy (i@2) + const (1 : i32) - @73 := () - @35 := move (@73) - drop @38 - drop @36 - drop @35 - @74 := () - @8 := move (@74) - continue 0 - }, - } - } - @72 := () - @29 := move (@72) - drop @38 - drop @36 - drop @35 - drop iter@34 - drop @30 - drop @29 - @43 := &a@1 - @42 := @ArrayToSliceShared<'_, i32, 7 : usize>(move (@43)) - drop @43 - @41 := core::slice::{Slice}::chunks_exact<'_, i32>[core::marker::Sized](move (@42), const (2 : usize)) - drop @42 - @40 := core::iter::traits::collect::{impl core::iter::traits::collect::IntoIterator for I}#1::into_iter[core::marker::Sized]>[core::marker::Sized[core::marker::Sized]>, core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::ChunksExact<'a, T>[@TraitClause0]}#90<'_, i32>[core::marker::Sized]](move (@41)) - drop @41 - @fake_read(@40) - iter@44 := move (@40) - loop { - @48 := &mut iter@44 - @47 := &two-phase-mut *(@48) - @46 := core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::ChunksExact<'a, T>[@TraitClause0]}#90::next<'_, '_, i32>[core::marker::Sized](move (@47)) - drop @47 - @fake_read(@46) - match @46 { - 0 => { - break 0 - }, - 1 => { - i@2 := copy (i@2) + const (1 : i32) - @76 := () - @45 := move (@76) - drop @48 - drop @46 - drop @45 - @77 := () - @8 := move (@77) - continue 0 - }, - } - } - @75 := () - @39 := move (@75) - drop @48 - drop @46 - drop @45 - drop iter@44 - drop @40 - drop @39 - expected@49 := const (28 : i32) - @fake_read(expected@49) - @52 := &i@2 - @53 := &expected@49 - @51 := (move (@52), move (@53)) - drop @53 - drop @52 - @fake_read(@51) - left_val@54 := copy ((@51).0) - right_val@55 := copy ((@51).1) - @57 := copy (*(left_val@54)) - @58 := copy (*(right_val@55)) - @56 := move (@57) == move (@58) - if move (@56) { - } - else { - drop @58 - drop @57 - kind@59 := core::panicking::AssertKind::Eq { } - @fake_read(kind@59) - @60 := move (kind@59) - @62 := &*(left_val@54) - @61 := &*(@62) - @64 := &*(right_val@55) - @63 := &*(@64) - @65 := core::option::Option::None { } - panic(core::panicking::assert_failed) - } - drop @58 - drop @57 - @78 := () - @50 := move (@78) - drop @56 - drop right_val@55 - drop left_val@54 - drop @51 - drop @50 - @79 := () - @0 := move (@79) - drop expected@49 - drop i@2 - drop a@1 - @0 := () - return -} - -fn core::iter::traits::collect::IntoIterator::into_iter(@1: Self) -> @TraitClause0::IntoIter -where - [@TraitClause0]: core::iter::traits::collect::IntoIterator, - -impl core::array::iter::{impl core::iter::traits::collect::IntoIterator for Array} : core::iter::traits::collect::IntoIterator> -where - [@TraitClause0]: core::marker::Sized, -{ - parent_clause0 = @TraitClause0 - parent_clause1 = core::array::iter::{impl core::iter::traits::iterator::Iterator for core::array::iter::IntoIter[@TraitClause0]}#2[@TraitClause0] - parent_clause2 = core::marker::Sized[@TraitClause0]> - type Item = T - type IntoIter = core::array::iter::IntoIter[@TraitClause0] - fn into_iter = core::array::iter::{impl core::iter::traits::collect::IntoIterator for Array}::into_iter[@TraitClause0] -} - -impl core::iter::traits::collect::{impl core::iter::traits::collect::IntoIterator for I}#1 : core::iter::traits::collect::IntoIterator -where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::iter::traits::iterator::Iterator, -{ - parent_clause0 = @TraitClause1::parent_clause0 - parent_clause1 = @TraitClause1 - parent_clause2 = @TraitClause0 - type Item = @TraitClause1::Item - type IntoIter = I - fn into_iter = core::iter::traits::collect::{impl core::iter::traits::collect::IntoIterator for I}#1::into_iter[@TraitClause0, @TraitClause1] -} - -fn core::iter::traits::iterator::Iterator::next<'_0, Self>(@1: &'_0 mut (Self)) -> core::option::Option<@TraitClause0::Item>[@TraitClause0::parent_clause0] -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - -fn core::ops::arith::AddAssign::add_assign<'_0, Self, Rhs>(@1: &'_0 mut (Self), @2: Rhs) -where - [@TraitClause0]: core::ops::arith::AddAssign, - -trait core::ops::arith::AddAssign -{ - parent_clause0 : [@TraitClause0]: core::marker::Sized - fn add_assign<'_0> = core::ops::arith::AddAssign::add_assign<'_0_0, Self, Rhs>[Self] -} - -impl<'_0> core::ops::arith::{impl core::ops::arith::AddAssign<&'_0 (i32)> for i32}#365<'_0> : core::ops::arith::AddAssign -{ - parent_clause0 = core::marker::Sized<&'_ (i32)> - fn add_assign<'_0> = core::ops::arith::{impl core::ops::arith::AddAssign<&'_0 (i32)> for i32}#365::add_assign<'_0, '_0_0> -} - -fn core::iter::traits::iterator::Iterator::next_chunk<'_0, Self, const N : usize>(@1: &'_0 mut (Self)) -> core::result::Result, core::array::iter::IntoIter<@TraitClause0::Item, const N : usize>[@TraitClause0::parent_clause0]>[core::marker::Sized>, core::marker::Sized[@TraitClause0::parent_clause0]>] -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized, - -fn core::iter::traits::iterator::Iterator::nth<'_0, Self>(@1: &'_0 mut (Self), @2: usize) -> core::option::Option<@TraitClause0::Item>[@TraitClause0::parent_clause0] -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - -fn core::iter::traits::iterator::Iterator::step_by(@1: Self, @2: usize) -> core::iter::adapters::step_by::StepBy[@TraitClause1] -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized, - -fn core::iter::traits::iterator::Iterator::chain(@1: Self, @2: U) -> core::iter::adapters::chain::Chain[@TraitClause2, @TraitClause3::parent_clause2] -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::marker::Sized, - [@TraitClause3]: core::iter::traits::collect::IntoIterator, - @TraitClause3::Item = @TraitClause0::Item, - -fn core::iter::traits::iterator::Iterator::zip(@1: Self, @2: U) -> core::iter::adapters::zip::Zip[@TraitClause2, @TraitClause3::parent_clause2] -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::marker::Sized, - [@TraitClause3]: core::iter::traits::collect::IntoIterator, - -fn core::iter::traits::iterator::Iterator::intersperse(@1: Self, @2: @TraitClause0::Item) -> core::iter::adapters::intersperse::Intersperse[@TraitClause1, @TraitClause0, @TraitClause2] -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::clone::Clone<@TraitClause0::Item>, - -fn core::iter::traits::iterator::Iterator::intersperse_with(@1: Self, @2: G) -> core::iter::adapters::intersperse::IntersperseWith[@TraitClause2, @TraitClause1, @TraitClause0] -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::marker::Sized, - [@TraitClause3]: core::ops::function::FnMut, - @TraitClause3::parent_clause0::Output = @TraitClause0::Item, - -fn core::iter::traits::iterator::Iterator::map(@1: Self, @2: F) -> core::iter::adapters::map::Map[@TraitClause3, @TraitClause2] -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::marker::Sized, - [@TraitClause3]: core::marker::Sized, - [@TraitClause4]: core::ops::function::FnMut, - @TraitClause4::parent_clause0::Output = B, - -fn core::iter::traits::iterator::Iterator::for_each(@1: Self, @2: F) -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::marker::Sized, - [@TraitClause3]: core::ops::function::FnMut, - @TraitClause3::parent_clause0::Output = (), - -fn core::iter::traits::iterator::Iterator::filter(@1: Self, @2: P) -> core::iter::adapters::filter::Filter[@TraitClause2, @TraitClause1] -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized

, - [@TraitClause2]: core::marker::Sized, - [@TraitClause3]: for<'_0> core::ops::function::FnMut, - for<'_0> @TraitClause3::parent_clause0::Output = bool, - -fn core::iter::traits::iterator::Iterator::filter_map(@1: Self, @2: F) -> core::iter::adapters::filter_map::FilterMap[@TraitClause3, @TraitClause2] -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::marker::Sized, - [@TraitClause3]: core::marker::Sized, - [@TraitClause4]: core::ops::function::FnMut, - @TraitClause4::parent_clause0::Output = core::option::Option[@TraitClause1], - -fn core::iter::traits::iterator::Iterator::enumerate(@1: Self) -> core::iter::adapters::enumerate::Enumerate[@TraitClause1] -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized, - -fn core::iter::traits::iterator::Iterator::peekable(@1: Self) -> core::iter::adapters::peekable::Peekable[@TraitClause1, @TraitClause0] -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized, - -fn core::iter::traits::iterator::Iterator::skip_while(@1: Self, @2: P) -> core::iter::adapters::skip_while::SkipWhile[@TraitClause2, @TraitClause1] -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized

, - [@TraitClause2]: core::marker::Sized, - [@TraitClause3]: for<'_0> core::ops::function::FnMut, - for<'_0> @TraitClause3::parent_clause0::Output = bool, - -fn core::iter::traits::iterator::Iterator::take_while(@1: Self, @2: P) -> core::iter::adapters::take_while::TakeWhile[@TraitClause2, @TraitClause1] -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized

, - [@TraitClause2]: core::marker::Sized, - [@TraitClause3]: for<'_0> core::ops::function::FnMut, - for<'_0> @TraitClause3::parent_clause0::Output = bool, - -fn core::iter::traits::iterator::Iterator::map_while(@1: Self, @2: P) -> core::iter::adapters::map_while::MapWhile[@TraitClause3, @TraitClause2] -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::marker::Sized

, - [@TraitClause3]: core::marker::Sized, - [@TraitClause4]: core::ops::function::FnMut, - @TraitClause4::parent_clause0::Output = core::option::Option[@TraitClause1], - -fn core::iter::traits::iterator::Iterator::skip(@1: Self, @2: usize) -> core::iter::adapters::skip::Skip[@TraitClause1] -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized, - -fn core::iter::traits::iterator::Iterator::take(@1: Self, @2: usize) -> core::iter::adapters::take::Take[@TraitClause1] -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized, - -fn core::iter::traits::iterator::Iterator::scan(@1: Self, @2: St, @3: F) -> core::iter::adapters::scan::Scan[@TraitClause4, @TraitClause1, @TraitClause3] -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::marker::Sized, - [@TraitClause3]: core::marker::Sized, - [@TraitClause4]: core::marker::Sized, - [@TraitClause5]: for<'_0> core::ops::function::FnMut, - for<'_0> @TraitClause5::parent_clause0::Output = core::option::Option[@TraitClause2], - -fn core::iter::traits::iterator::Iterator::flat_map(@1: Self, @2: F) -> core::iter::adapters::flatten::FlatMap[@TraitClause3, @TraitClause1, @TraitClause2, @TraitClause4] -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::marker::Sized, - [@TraitClause3]: core::marker::Sized, - [@TraitClause4]: core::iter::traits::collect::IntoIterator, - [@TraitClause5]: core::ops::function::FnMut, - @TraitClause5::parent_clause0::Output = U, - -fn core::iter::traits::iterator::Iterator::flatten(@1: Self) -> core::iter::adapters::flatten::Flatten[@TraitClause1, @TraitClause0, @TraitClause2] -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::iter::traits::collect::IntoIterator<@TraitClause0::Item>, - -fn core::iter::traits::iterator::Iterator::map_windows(@1: Self, @2: F) -> core::iter::adapters::map_windows::MapWindows[@TraitClause3, @TraitClause1, @TraitClause0] -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::marker::Sized, - [@TraitClause3]: core::marker::Sized, - [@TraitClause4]: for<'_0> core::ops::function::FnMut))>, - for<'_0> @TraitClause4::parent_clause0::Output = R, - -fn core::iter::traits::iterator::Iterator::fuse(@1: Self) -> core::iter::adapters::fuse::Fuse[@TraitClause1] -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized, - -fn core::iter::traits::iterator::Iterator::inspect(@1: Self, @2: F) -> core::iter::adapters::inspect::Inspect[@TraitClause2, @TraitClause1] -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::marker::Sized, - [@TraitClause3]: for<'_0> core::ops::function::FnMut, - for<'_0> @TraitClause3::parent_clause0::Output = (), - -fn core::iter::traits::iterator::Iterator::by_ref<'_0, Self>(@1: &'_0 mut (Self)) -> &'_0 mut (Self) -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized, - -fn core::iter::traits::iterator::Iterator::collect(@1: Self) -> B -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::iter::traits::collect::FromIterator, - [@TraitClause3]: core::marker::Sized, - -fn core::iter::traits::iterator::Iterator::try_collect<'_0, Self, B>(@1: &'_0 mut (Self)) -> @TraitClause4::TryType -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::marker::Sized, - [@TraitClause3]: core::ops::try_trait::Try<@TraitClause0::Item>, - [@TraitClause4]: core::ops::try_trait::Residual<@TraitClause3::Residual, B>, - [@TraitClause5]: core::iter::traits::collect::FromIterator, - -fn core::iter::traits::iterator::Iterator::collect_into<'_0, Self, E>(@1: Self, @2: &'_0 mut (E)) -> &'_0 mut (E) -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::iter::traits::collect::Extend, - [@TraitClause3]: core::marker::Sized, - -fn core::iter::traits::iterator::Iterator::partition(@1: Self, @2: F) -> (B, B) -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::marker::Sized, - [@TraitClause3]: core::marker::Sized, - [@TraitClause4]: core::default::Default, - [@TraitClause5]: core::iter::traits::collect::Extend, - [@TraitClause6]: for<'_0> core::ops::function::FnMut, - for<'_0> @TraitClause6::parent_clause0::Output = bool, - -fn core::iter::traits::iterator::Iterator::partition_in_place<'a, Self, T, P>(@1: Self, @2: P) -> usize -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::marker::Sized

, - [@TraitClause3]: core::marker::Sized, - [@TraitClause4]: core::iter::traits::double_ended::DoubleEndedIterator, - [@TraitClause5]: for<'_0> core::ops::function::FnMut, - T : 'a, - @TraitClause0::Item = &'a mut (T), - for<'_0> @TraitClause5::parent_clause0::Output = bool, - -fn core::iter::traits::iterator::Iterator::is_partitioned(@1: Self, @2: P) -> bool -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized

, - [@TraitClause2]: core::marker::Sized, - [@TraitClause3]: core::ops::function::FnMut, - @TraitClause3::parent_clause0::Output = bool, - -fn core::iter::traits::iterator::Iterator::try_fold<'_0, Self, B, F, R>(@1: &'_0 mut (Self), @2: B, @3: F) -> R -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::marker::Sized, - [@TraitClause3]: core::marker::Sized, - [@TraitClause4]: core::marker::Sized, - [@TraitClause5]: core::ops::function::FnMut, - [@TraitClause6]: core::ops::try_trait::Try, - @TraitClause5::parent_clause0::Output = R, - @TraitClause6::Output = B, - -fn core::iter::traits::iterator::Iterator::try_for_each<'_0, Self, F, R>(@1: &'_0 mut (Self), @2: F) -> R -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::marker::Sized, - [@TraitClause3]: core::marker::Sized, - [@TraitClause4]: core::ops::function::FnMut, - [@TraitClause5]: core::ops::try_trait::Try, - @TraitClause4::parent_clause0::Output = R, - @TraitClause5::Output = (), - -fn core::iter::traits::iterator::Iterator::reduce(@1: Self, @2: F) -> core::option::Option<@TraitClause0::Item>[@TraitClause0::parent_clause0] -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::marker::Sized, - [@TraitClause3]: core::ops::function::FnMut, - @TraitClause3::parent_clause0::Output = @TraitClause0::Item, - -fn core::iter::traits::iterator::Iterator::try_reduce<'_0, Self, R, impl FnMut(Self::Item, Self::Item) -> R>(@1: &'_0 mut (Self), @2: impl FnMut(Self::Item, Self::Item) -> R) -> @TraitClause5::TryType -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::marker::Sized R>, - [@TraitClause3]: core::marker::Sized, - [@TraitClause4]: core::ops::try_trait::Try, - [@TraitClause5]: core::ops::try_trait::Residual<@TraitClause4::Residual, core::option::Option<@TraitClause0::Item>[@TraitClause0::parent_clause0]>, - [@TraitClause6]: core::ops::function::FnMut R, (@TraitClause0::Item, @TraitClause0::Item)>, - @TraitClause4::Output = @TraitClause0::Item, - @TraitClause6::parent_clause0::Output = R, - -fn core::iter::traits::iterator::Iterator::all<'_0, Self, F>(@1: &'_0 mut (Self), @2: F) -> bool -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::marker::Sized, - [@TraitClause3]: core::ops::function::FnMut, - @TraitClause3::parent_clause0::Output = bool, - -fn core::iter::traits::iterator::Iterator::any<'_0, Self, F>(@1: &'_0 mut (Self), @2: F) -> bool -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::marker::Sized, - [@TraitClause3]: core::ops::function::FnMut, - @TraitClause3::parent_clause0::Output = bool, - -fn core::iter::traits::iterator::Iterator::find<'_0, Self, P>(@1: &'_0 mut (Self), @2: P) -> core::option::Option<@TraitClause0::Item>[@TraitClause0::parent_clause0] -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized

, - [@TraitClause2]: core::marker::Sized, - [@TraitClause3]: for<'_0> core::ops::function::FnMut, - for<'_0> @TraitClause3::parent_clause0::Output = bool, - -fn core::iter::traits::iterator::Iterator::find_map<'_0, Self, B, F>(@1: &'_0 mut (Self), @2: F) -> core::option::Option[@TraitClause1] -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::marker::Sized, - [@TraitClause3]: core::marker::Sized, - [@TraitClause4]: core::ops::function::FnMut, - @TraitClause4::parent_clause0::Output = core::option::Option[@TraitClause1], - -fn core::iter::traits::iterator::Iterator::try_find<'_0, Self, R, impl FnMut(&Self::Item) -> R>(@1: &'_0 mut (Self), @2: impl FnMut(&Self::Item) -> R) -> @TraitClause5::TryType -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::marker::Sized R>, - [@TraitClause3]: core::marker::Sized, - [@TraitClause4]: core::ops::try_trait::Try, - [@TraitClause5]: core::ops::try_trait::Residual<@TraitClause4::Residual, core::option::Option<@TraitClause0::Item>[@TraitClause0::parent_clause0]>, - [@TraitClause6]: for<'_0> core::ops::function::FnMut R, (&'_0_0 (@TraitClause0::Item))>, - @TraitClause4::Output = bool, - for<'_0> @TraitClause6::parent_clause0::Output = R, - -fn core::iter::traits::iterator::Iterator::position<'_0, Self, P>(@1: &'_0 mut (Self), @2: P) -> core::option::Option[core::marker::Sized] -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized

, - [@TraitClause2]: core::marker::Sized, - [@TraitClause3]: core::ops::function::FnMut, - @TraitClause3::parent_clause0::Output = bool, - -fn core::iter::traits::iterator::Iterator::rposition<'_0, Self, P>(@1: &'_0 mut (Self), @2: P) -> core::option::Option[core::marker::Sized] -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized

, - [@TraitClause2]: core::ops::function::FnMut, - [@TraitClause3]: core::marker::Sized, - [@TraitClause4]: core::iter::traits::exact_size::ExactSizeIterator, - [@TraitClause5]: core::iter::traits::double_ended::DoubleEndedIterator, - @TraitClause2::parent_clause0::Output = bool, - -fn core::iter::traits::iterator::Iterator::max(@1: Self) -> core::option::Option<@TraitClause0::Item>[@TraitClause0::parent_clause0] -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::cmp::Ord<@TraitClause0::Item>, - -fn core::iter::traits::iterator::Iterator::min(@1: Self) -> core::option::Option<@TraitClause0::Item>[@TraitClause0::parent_clause0] -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::cmp::Ord<@TraitClause0::Item>, - -fn core::iter::traits::iterator::Iterator::max_by_key(@1: Self, @2: F) -> core::option::Option<@TraitClause0::Item>[@TraitClause0::parent_clause0] -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::marker::Sized, - [@TraitClause3]: core::cmp::Ord, - [@TraitClause4]: core::marker::Sized, - [@TraitClause5]: for<'_0> core::ops::function::FnMut, - for<'_0> @TraitClause5::parent_clause0::Output = B, - -fn core::iter::traits::iterator::Iterator::max_by(@1: Self, @2: F) -> core::option::Option<@TraitClause0::Item>[@TraitClause0::parent_clause0] -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::marker::Sized, - [@TraitClause3]: for<'_0, '_1> core::ops::function::FnMut, - for<'_0, '_1> @TraitClause3::parent_clause0::Output = core::cmp::Ordering, - -fn core::iter::traits::iterator::Iterator::min_by_key(@1: Self, @2: F) -> core::option::Option<@TraitClause0::Item>[@TraitClause0::parent_clause0] -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::marker::Sized, - [@TraitClause3]: core::cmp::Ord, - [@TraitClause4]: core::marker::Sized, - [@TraitClause5]: for<'_0> core::ops::function::FnMut, - for<'_0> @TraitClause5::parent_clause0::Output = B, - -fn core::iter::traits::iterator::Iterator::min_by(@1: Self, @2: F) -> core::option::Option<@TraitClause0::Item>[@TraitClause0::parent_clause0] -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::marker::Sized, - [@TraitClause3]: for<'_0, '_1> core::ops::function::FnMut, - for<'_0, '_1> @TraitClause3::parent_clause0::Output = core::cmp::Ordering, - -fn core::iter::traits::iterator::Iterator::rev(@1: Self) -> core::iter::adapters::rev::Rev[@TraitClause1] -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::iter::traits::double_ended::DoubleEndedIterator, - -fn core::iter::traits::iterator::Iterator::unzip(@1: Self) -> (FromA, FromB) -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::marker::Sized, - [@TraitClause3]: core::marker::Sized, - [@TraitClause4]: core::marker::Sized, - [@TraitClause5]: core::default::Default, - [@TraitClause6]: core::iter::traits::collect::Extend, - [@TraitClause7]: core::default::Default, - [@TraitClause8]: core::iter::traits::collect::Extend, - [@TraitClause9]: core::marker::Sized, - [@TraitClause10]: core::iter::traits::iterator::Iterator, - @TraitClause0::Item = (A, B), - -fn core::iter::traits::iterator::Iterator::copied<'a, Self, T>(@1: Self) -> core::iter::adapters::copied::Copied[@TraitClause2] -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::marker::Sized, - [@TraitClause3]: core::iter::traits::iterator::Iterator, - [@TraitClause4]: core::marker::Copy, - T : 'a, - @TraitClause0::Item = &'a (T), - -fn core::iter::traits::iterator::Iterator::cloned<'a, Self, T>(@1: Self) -> core::iter::adapters::cloned::Cloned[@TraitClause2] -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::marker::Sized, - [@TraitClause3]: core::iter::traits::iterator::Iterator, - [@TraitClause4]: core::clone::Clone, - T : 'a, - @TraitClause0::Item = &'a (T), - -fn core::iter::traits::iterator::Iterator::cycle(@1: Self) -> core::iter::adapters::cycle::Cycle[@TraitClause1] -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::clone::Clone, - -fn core::iter::traits::iterator::Iterator::array_chunks(@1: Self) -> core::iter::adapters::array_chunks::ArrayChunks[@TraitClause1, @TraitClause0] -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized, - -fn core::iter::traits::iterator::Iterator::sum(@1: Self) -> S -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::marker::Sized, - [@TraitClause3]: core::iter::traits::accum::Sum, - -fn core::iter::traits::iterator::Iterator::product(@1: Self) -> P -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized

, - [@TraitClause2]: core::marker::Sized, - [@TraitClause3]: core::iter::traits::accum::Product, - -fn core::iter::traits::iterator::Iterator::cmp(@1: Self, @2: I) -> core::cmp::Ordering -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::iter::traits::collect::IntoIterator, - [@TraitClause3]: core::cmp::Ord<@TraitClause0::Item>, - [@TraitClause4]: core::marker::Sized, - @TraitClause2::Item = @TraitClause0::Item, - -fn core::iter::traits::iterator::Iterator::cmp_by(@1: Self, @2: I, @3: F) -> core::cmp::Ordering -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::marker::Sized, - [@TraitClause3]: core::marker::Sized, - [@TraitClause4]: core::iter::traits::collect::IntoIterator, - [@TraitClause5]: core::ops::function::FnMut, - @TraitClause5::parent_clause0::Output = core::cmp::Ordering, - -fn core::iter::traits::iterator::Iterator::partial_cmp(@1: Self, @2: I) -> core::option::Option[core::marker::Sized] -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::iter::traits::collect::IntoIterator, - [@TraitClause3]: core::cmp::PartialOrd<@TraitClause0::Item, @TraitClause2::Item>, - [@TraitClause4]: core::marker::Sized, - -fn core::iter::traits::iterator::Iterator::partial_cmp_by(@1: Self, @2: I, @3: F) -> core::option::Option[core::marker::Sized] -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::marker::Sized, - [@TraitClause3]: core::marker::Sized, - [@TraitClause4]: core::iter::traits::collect::IntoIterator, - [@TraitClause5]: core::ops::function::FnMut, - @TraitClause5::parent_clause0::Output = core::option::Option[core::marker::Sized], - -fn core::iter::traits::iterator::Iterator::eq(@1: Self, @2: I) -> bool -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::iter::traits::collect::IntoIterator, - [@TraitClause3]: core::cmp::PartialEq<@TraitClause0::Item, @TraitClause2::Item>, - [@TraitClause4]: core::marker::Sized, - -fn core::iter::traits::iterator::Iterator::eq_by(@1: Self, @2: I, @3: F) -> bool -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::marker::Sized, - [@TraitClause3]: core::marker::Sized, - [@TraitClause4]: core::iter::traits::collect::IntoIterator, - [@TraitClause5]: core::ops::function::FnMut, - @TraitClause5::parent_clause0::Output = bool, - -fn core::iter::traits::iterator::Iterator::ne(@1: Self, @2: I) -> bool -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::iter::traits::collect::IntoIterator, - [@TraitClause3]: core::cmp::PartialEq<@TraitClause0::Item, @TraitClause2::Item>, - [@TraitClause4]: core::marker::Sized, - -fn core::iter::traits::iterator::Iterator::lt(@1: Self, @2: I) -> bool -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::iter::traits::collect::IntoIterator, - [@TraitClause3]: core::cmp::PartialOrd<@TraitClause0::Item, @TraitClause2::Item>, - [@TraitClause4]: core::marker::Sized, - -fn core::iter::traits::iterator::Iterator::le(@1: Self, @2: I) -> bool -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::iter::traits::collect::IntoIterator, - [@TraitClause3]: core::cmp::PartialOrd<@TraitClause0::Item, @TraitClause2::Item>, - [@TraitClause4]: core::marker::Sized, - -fn core::iter::traits::iterator::Iterator::gt(@1: Self, @2: I) -> bool -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::iter::traits::collect::IntoIterator, - [@TraitClause3]: core::cmp::PartialOrd<@TraitClause0::Item, @TraitClause2::Item>, - [@TraitClause4]: core::marker::Sized, - -fn core::iter::traits::iterator::Iterator::ge(@1: Self, @2: I) -> bool -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::iter::traits::collect::IntoIterator, - [@TraitClause3]: core::cmp::PartialOrd<@TraitClause0::Item, @TraitClause2::Item>, - [@TraitClause4]: core::marker::Sized, - -fn core::iter::traits::iterator::Iterator::is_sorted(@1: Self) -> bool -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::cmp::PartialOrd<@TraitClause0::Item, @TraitClause0::Item>, - -fn core::iter::traits::iterator::Iterator::is_sorted_by(@1: Self, @2: F) -> bool -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::marker::Sized, - [@TraitClause3]: for<'_0, '_1> core::ops::function::FnMut, - for<'_0, '_1> @TraitClause3::parent_clause0::Output = bool, - -fn core::iter::traits::iterator::Iterator::is_sorted_by_key(@1: Self, @2: F) -> bool -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::marker::Sized, - [@TraitClause3]: core::marker::Sized, - [@TraitClause4]: core::ops::function::FnMut, - [@TraitClause5]: core::cmp::PartialOrd, - @TraitClause4::parent_clause0::Output = K, - -fn core::ops::function::FnMut::call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> @TraitClause0::parent_clause0::Output -where - [@TraitClause0]: core::ops::function::FnMut, - -fn core::ops::function::FnOnce::call_once(@1: Self, @2: Args) -> @TraitClause0::Output -where - [@TraitClause0]: core::ops::function::FnOnce, - -fn core::clone::Clone::clone<'_0, Self>(@1: &'_0 (Self)) -> Self -where - [@TraitClause0]: core::clone::Clone, - -fn core::clone::Clone::clone_from<'_0, '_1, Self>(@1: &'_0 mut (Self), @2: &'_1 (Self)) -where - [@TraitClause0]: core::clone::Clone, - -fn core::iter::traits::iterator::Iterator::size_hint<'_0, Self>(@1: &'_0 (Self)) -> (usize, core::option::Option[core::marker::Sized]) -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - -fn core::iter::traits::iterator::Iterator::count(@1: Self) -> usize -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized, - -fn core::iter::traits::iterator::Iterator::last(@1: Self) -> core::option::Option<@TraitClause0::Item>[@TraitClause0::parent_clause0] -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized, - -fn core::iter::traits::iterator::Iterator::advance_by<'_0, Self>(@1: &'_0 mut (Self), @2: usize) -> core::result::Result<(), core::num::nonzero::NonZero[core::marker::Sized, core::num::nonzero::{impl core::num::nonzero::ZeroablePrimitive for usize}#26]>[core::marker::Sized<()>, core::marker::Sized[core::marker::Sized, core::num::nonzero::{impl core::num::nonzero::ZeroablePrimitive for usize}#26]>] -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - -fn core::iter::traits::iterator::Iterator::fold(@1: Self, @2: B, @3: F) -> B -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::marker::Sized, - [@TraitClause3]: core::marker::Sized, - [@TraitClause4]: core::ops::function::FnMut, - @TraitClause4::parent_clause0::Output = B, - -unsafe fn core::iter::traits::iterator::Iterator::__iterator_get_unchecked<'_0, Self>(@1: &'_0 mut (Self), @2: usize) -> @TraitClause0::Item -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - [@TraitClause1]: core::iter::adapters::zip::TrustedRandomAccessNoCoerce, - -fn core::cmp::PartialEq::eq<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool -where - [@TraitClause0]: core::cmp::PartialEq, - -fn core::cmp::PartialEq::ne<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool -where - [@TraitClause0]: core::cmp::PartialEq, - -fn core::cmp::Ord::cmp<'_0, '_1, Self>(@1: &'_0 (Self), @2: &'_1 (Self)) -> core::cmp::Ordering -where - [@TraitClause0]: core::cmp::Ord, - -fn core::cmp::Ord::max(@1: Self, @2: Self) -> Self -where - [@TraitClause0]: core::cmp::Ord, - [@TraitClause1]: core::marker::Sized, - -fn core::cmp::Ord::min(@1: Self, @2: Self) -> Self -where - [@TraitClause0]: core::cmp::Ord, - [@TraitClause1]: core::marker::Sized, - -fn core::cmp::Ord::clamp(@1: Self, @2: Self, @3: Self) -> Self -where - [@TraitClause0]: core::cmp::Ord, - [@TraitClause1]: core::marker::Sized, - -fn core::cmp::Eq::assert_receiver_is_total_eq<'_0, Self>(@1: &'_0 (Self)) -where - [@TraitClause0]: core::cmp::Eq, - -fn core::cmp::PartialOrd::partial_cmp<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> core::option::Option[core::marker::Sized] -where - [@TraitClause0]: core::cmp::PartialOrd, - -fn core::cmp::PartialOrd::lt<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool -where - [@TraitClause0]: core::cmp::PartialOrd, - -fn core::cmp::PartialOrd::le<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool -where - [@TraitClause0]: core::cmp::PartialOrd, - -fn core::cmp::PartialOrd::gt<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool -where - [@TraitClause0]: core::cmp::PartialOrd, - -fn core::cmp::PartialOrd::ge<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool -where - [@TraitClause0]: core::cmp::PartialOrd, - -fn core::default::Default::default() -> Self -where - [@TraitClause0]: core::default::Default, - -fn core::ops::try_trait::Try::from_output(@1: @TraitClause0::Output) -> Self -where - [@TraitClause0]: core::ops::try_trait::Try, - -fn core::ops::try_trait::Try::branch(@1: Self) -> core::ops::control_flow::ControlFlow<@TraitClause0::Residual, @TraitClause0::Output>[@TraitClause0::parent_clause0::parent_clause0, @TraitClause0::parent_clause1] -where - [@TraitClause0]: core::ops::try_trait::Try, - -fn core::ops::try_trait::FromResidual::from_residual(@1: R) -> Self -where - [@TraitClause0]: core::ops::try_trait::FromResidual, - -fn core::iter::adapters::zip::TrustedRandomAccessNoCoerce::size<'_0, Self>(@1: &'_0 (Self)) -> usize -where - [@TraitClause0]: core::iter::adapters::zip::TrustedRandomAccessNoCoerce, - [@TraitClause1]: core::iter::traits::iterator::Iterator, - -fn core::iter::traits::accum::Sum::sum(@1: I) -> Self -where - [@TraitClause0]: core::iter::traits::accum::Sum, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::iter::traits::iterator::Iterator, - @TraitClause2::Item = A, - -fn core::iter::traits::accum::Product::product(@1: I) -> Self -where - [@TraitClause0]: core::iter::traits::accum::Product, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::iter::traits::iterator::Iterator, - @TraitClause2::Item = A, - -fn core::iter::traits::collect::FromIterator::from_iter(@1: T) -> Self -where - [@TraitClause0]: core::iter::traits::collect::FromIterator, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::iter::traits::collect::IntoIterator, - @TraitClause2::Item = A, - -fn core::iter::traits::collect::Extend::extend<'_0, Self, A, T>(@1: &'_0 mut (Self), @2: T) -where - [@TraitClause0]: core::iter::traits::collect::Extend, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::iter::traits::collect::IntoIterator, - @TraitClause2::Item = A, - -fn core::iter::traits::collect::Extend::extend_one<'_0, Self, A>(@1: &'_0 mut (Self), @2: A) -where - [@TraitClause0]: core::iter::traits::collect::Extend, - -fn core::iter::traits::collect::Extend::extend_reserve<'_0, Self, A>(@1: &'_0 mut (Self), @2: usize) -where - [@TraitClause0]: core::iter::traits::collect::Extend, - -unsafe fn core::iter::traits::collect::Extend::extend_one_unchecked<'_0, Self, A>(@1: &'_0 mut (Self), @2: A) -where - [@TraitClause0]: core::iter::traits::collect::Extend, - [@TraitClause1]: core::marker::Sized, - -fn core::iter::traits::double_ended::DoubleEndedIterator::next_back<'_0, Self>(@1: &'_0 mut (Self)) -> core::option::Option<@TraitClause0::parent_clause0::Item>[@TraitClause0::parent_clause0::parent_clause0] -where - [@TraitClause0]: core::iter::traits::double_ended::DoubleEndedIterator, - -fn core::iter::traits::double_ended::DoubleEndedIterator::advance_back_by<'_0, Self>(@1: &'_0 mut (Self), @2: usize) -> core::result::Result<(), core::num::nonzero::NonZero[core::marker::Sized, core::num::nonzero::{impl core::num::nonzero::ZeroablePrimitive for usize}#26]>[core::marker::Sized<()>, core::marker::Sized[core::marker::Sized, core::num::nonzero::{impl core::num::nonzero::ZeroablePrimitive for usize}#26]>] -where - [@TraitClause0]: core::iter::traits::double_ended::DoubleEndedIterator, - -fn core::iter::traits::double_ended::DoubleEndedIterator::nth_back<'_0, Self>(@1: &'_0 mut (Self), @2: usize) -> core::option::Option<@TraitClause0::parent_clause0::Item>[@TraitClause0::parent_clause0::parent_clause0] -where - [@TraitClause0]: core::iter::traits::double_ended::DoubleEndedIterator, - -fn core::iter::traits::double_ended::DoubleEndedIterator::try_rfold<'_0, Self, B, F, R>(@1: &'_0 mut (Self), @2: B, @3: F) -> R -where - [@TraitClause0]: core::iter::traits::double_ended::DoubleEndedIterator, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::marker::Sized, - [@TraitClause3]: core::marker::Sized, - [@TraitClause4]: core::marker::Sized, - [@TraitClause5]: core::ops::function::FnMut, - [@TraitClause6]: core::ops::try_trait::Try, - @TraitClause5::parent_clause0::Output = R, - @TraitClause6::Output = B, - -fn core::iter::traits::double_ended::DoubleEndedIterator::rfold(@1: Self, @2: B, @3: F) -> B -where - [@TraitClause0]: core::iter::traits::double_ended::DoubleEndedIterator, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::marker::Sized, - [@TraitClause3]: core::marker::Sized, - [@TraitClause4]: core::ops::function::FnMut, - @TraitClause4::parent_clause0::Output = B, - -fn core::iter::traits::double_ended::DoubleEndedIterator::rfind<'_0, Self, P>(@1: &'_0 mut (Self), @2: P) -> core::option::Option<@TraitClause0::parent_clause0::Item>[@TraitClause0::parent_clause0::parent_clause0] -where - [@TraitClause0]: core::iter::traits::double_ended::DoubleEndedIterator, - [@TraitClause1]: core::marker::Sized

, - [@TraitClause2]: core::marker::Sized, - [@TraitClause3]: for<'_0> core::ops::function::FnMut, - for<'_0> @TraitClause3::parent_clause0::Output = bool, - -fn core::iter::traits::exact_size::ExactSizeIterator::len<'_0, Self>(@1: &'_0 (Self)) -> usize -where - [@TraitClause0]: core::iter::traits::exact_size::ExactSizeIterator, - -fn core::iter::traits::exact_size::ExactSizeIterator::is_empty<'_0, Self>(@1: &'_0 (Self)) -> bool -where - [@TraitClause0]: core::iter::traits::exact_size::ExactSizeIterator, - - -