diff --git a/charon-ml/src/CharonVersion.ml b/charon-ml/src/CharonVersion.ml index 2c3f09f7..91d3ad30 100644 --- a/charon-ml/src/CharonVersion.ml +++ b/charon-ml/src/CharonVersion.ml @@ -1,3 +1,3 @@ (* This is an automatically generated file, generated from `charon/Cargo.toml`. *) (* To re-generate this file, rune `make` in the root directory *) -let supported_charon_version = "0.1.59" +let supported_charon_version = "0.1.60" diff --git a/charon-ml/src/GAstUtils.ml b/charon-ml/src/GAstUtils.ml index 36754e18..4f49d705 100644 --- a/charon-ml/src/GAstUtils.ml +++ b/charon-ml/src/GAstUtils.ml @@ -41,6 +41,68 @@ let locals_get_input_vars (locals : locals) : var list = let fun_body_get_input_vars (fbody : 'body gexpr_body) : var list = locals_get_input_vars fbody.locals +(** Like `binder` but for the free variables bound by the generics of an item. + This is not present in the charon ast but returned by helpers so we don't + forget to substitute. Use `Substitute.apply_args_to_item_binder` to get the + correctly-substituted inner value. *) +type 'a item_binder = { + item_binder_params : generic_params; + item_binder_value : 'a; +} +[@@deriving show, ord] + +(** Lookup a method in this trait decl. The two levels of binders in the output + reflect that there are two binding levels: the trait generics and the method + generics. *) +let lookup_trait_decl_method (tdecl : trait_decl) (name : trait_item_name) : + fun_decl_ref binder item_binder option = + Option.map + (fun (_, bound_fn) -> + { item_binder_params = tdecl.generics; item_binder_value = bound_fn }) + (List.find_opt + (fun (s, _) -> s = name) + (tdecl.required_methods @ tdecl.provided_methods)) + +(** Lookup a method in this trait decl. The two levels of binders in the output + reflect that there are two binding levels: the trait generics and the method + generics. *) +let lookup_trait_decl_provided_method (tdecl : trait_decl) + (name : trait_item_name) : fun_decl_ref binder item_binder option = + Option.map + (fun (_, bound_fn) -> + { item_binder_params = tdecl.generics; item_binder_value = bound_fn }) + (List.find_opt (fun (s, _) -> s = name) tdecl.provided_methods) + +(** Lookup a method in this trait decl. The two levels of binders in the output + reflect that there are two binding levels: the trait generics and the method + generics. *) +let lookup_trait_decl_required_method (tdecl : trait_decl) + (name : trait_item_name) : fun_decl_ref binder item_binder option = + Option.map + (fun (_, bound_fn) -> + { item_binder_params = tdecl.generics; item_binder_value = bound_fn }) + (List.find_opt (fun (s, _) -> s = name) tdecl.required_methods) + +(** Lookup a method in this trait impl. The two levels of binders in the output + reflect that there are two binding levels: the impl generics and the method + generics. *) +let lookup_trait_impl_provided_method (timpl : trait_impl) + (name : trait_item_name) : fun_decl_ref binder item_binder option = + Option.map + (fun (_, bound_fn) -> + { item_binder_params = timpl.generics; item_binder_value = bound_fn }) + (List.find_opt (fun (s, _) -> s = name) timpl.provided_methods) + +(** Lookup a method in this trait impl. The two levels of binders in the output + reflect that there are two binding levels: the impl generics and the method + generics. *) +let lookup_trait_impl_required_method (timpl : trait_impl) + (name : trait_item_name) : fun_decl_ref binder item_binder option = + Option.map + (fun (_, bound_fn) -> + { item_binder_params = timpl.generics; item_binder_value = bound_fn }) + (List.find_opt (fun (s, _) -> s = name) timpl.required_methods) + let g_declaration_group_to_list (g : 'a g_declaration_group) : 'a list = match g with | RecGroup ids -> ids diff --git a/charon-ml/src/NameMatcher.ml b/charon-ml/src/NameMatcher.ml index a34e8d59..62d1de95 100644 --- a/charon-ml/src/NameMatcher.ml +++ b/charon-ml/src/NameMatcher.ml @@ -729,7 +729,7 @@ let match_fn_ptr (ctx : ctx) (c : match_config) (p : pattern) (func : E.fn_ptr) then let subst = Substitute.make_subst_from_generics d.signature.generics - func.generics Self + func.generics in let trait_ref = Substitute.trait_decl_ref_substitute subst trait_ref diff --git a/charon-ml/src/PrintGAst.ml b/charon-ml/src/PrintGAst.ml index 80dd5df3..988712b6 100644 --- a/charon-ml/src/PrintGAst.ml +++ b/charon-ml/src/PrintGAst.ml @@ -179,13 +179,17 @@ let trait_decl_to_string (env : 'a fmt_env) (indent : string) let required_methods = List.map (fun (name, f) -> - indent1 ^ "fn " ^ name ^ " : " ^ fun_decl_id_to_string env f ^ "\n") + indent1 ^ "fn " ^ name ^ " : " + ^ fun_decl_id_to_string env f.binder_value.fun_id + ^ "\n") def.required_methods in let provided_methods = List.map (fun (name, f) -> - indent1 ^ "fn " ^ name ^ " : " ^ fun_decl_id_to_string env f ^ "\n") + indent1 ^ "fn " ^ name ^ " : " + ^ fun_decl_id_to_string env f.binder_value.fun_id + ^ "\n") def.provided_methods in let items = @@ -249,7 +253,9 @@ let trait_impl_to_string (env : 'a fmt_env) (indent : string) def.types in let env_method (name, f) = - indent1 ^ "fn " ^ name ^ " : " ^ fun_decl_id_to_string env f ^ "\n" + indent1 ^ "fn " ^ name ^ " : " + ^ fun_decl_id_to_string env f.binder_value.fun_id + ^ "\n" in let required_methods = List.map env_method def.required_methods in let provided_methods = List.map env_method def.provided_methods in diff --git a/charon-ml/src/Substitute.ml b/charon-ml/src/Substitute.ml index d09a06da..9343a944 100644 --- a/charon-ml/src/Substitute.ml +++ b/charon-ml/src/Substitute.ml @@ -4,6 +4,7 @@ open Types open TypesUtils +open GAstUtils open Expressions open LlbcAst @@ -44,6 +45,7 @@ let empty_subst : subst = tr_self = Self; } +(** The do-nothing substitution when used with `subst_free_vars` *) let empty_bound_sb_subst : single_binder_subst = { r_sb_subst = compose empty_subst.r_subst zero_db_var; @@ -53,6 +55,7 @@ let empty_bound_sb_subst : single_binder_subst = tr_sb_self = empty_subst.tr_self; } +(** The do-nothing substitution when used with `subst_at_binder_zero` *) let empty_free_sb_subst : single_binder_subst = let free x = Free x in { @@ -64,7 +67,7 @@ let empty_free_sb_subst : single_binder_subst = } let error_sb_subst : single_binder_subst = - let error _ = failwith "Unexpected bound Cariable" in + let error _ = failwith "Unexpected bound variable" in { r_sb_subst = compose empty_subst.r_subst error; ty_sb_subst = compose empty_subst.ty_subst error; @@ -116,25 +119,53 @@ let subst_remove_binder_zero (subst : single_binder_subst) : subst = tr_self = subst.tr_sb_self; } +(** Visitor that shifts all bound variables by the given delta *) +let st_shift_visitor = + object (self) + inherit [_] map_statement + method! visit_de_bruijn_id delta dbid = dbid + delta + end + +(* Shift the the substitution under one binder. *) +let shift_subst (subst : subst) : subst = + (* We decrement the input because the variables we encounter will be bound + deeper. We shift the output so that it's valid at the new depth we're + substituting it into. *) + { + r_subst = + compose + (st_shift_visitor#visit_region 1) + (compose subst.r_subst decr_db_var); + ty_subst = + compose (st_shift_visitor#visit_ty 1) (compose subst.ty_subst decr_db_var); + cg_subst = + compose + (st_shift_visitor#visit_const_generic 1) + (compose subst.cg_subst decr_db_var); + tr_subst = + compose + (st_shift_visitor#visit_trait_instance_id 1) + (compose subst.tr_subst decr_db_var); + tr_self = subst.tr_self; + } + +(** Visitor that applies the given substitution *) let st_substitute_visitor = object (self) inherit [_] map_statement + method! visit_binder visit_value (subst : subst) x = + (* Note that we don't visit the bound variables. *) + let { binder_params; binder_value } = x in + (* Crucial: we shift the substitution to be valid under this binder. *) + let binder_value = visit_value (shift_subst subst) binder_value in + { binder_params; binder_value } + method! visit_region_binder visit_value (subst : subst) x = - (* Shift the indices of the substitution under one binder level. *) - let shift_subst (subst : subst) : subst = - { - r_subst = compose subst.r_subst decr_db_var; - ty_subst = compose subst.ty_subst decr_db_var; - cg_subst = compose subst.cg_subst decr_db_var; - tr_subst = compose subst.tr_subst decr_db_var; - tr_self = subst.tr_self; - } - in - let subst = shift_subst subst in - (* Note that we ignore the bound regions variables *) + (* Note that we don't visit the bound variables. *) let { binder_regions; binder_value } = x in - let binder_value = visit_value subst binder_value in + (* Crucial: we shift the substitution to be valid under this binder. *) + let binder_value = visit_value (shift_subst subst) binder_value in { binder_regions; binder_value } method! visit_RVar (subst : subst) var = subst.r_subst var @@ -291,8 +322,8 @@ let make_trait_subst_from_clauses (clauses : trait_clause list) (List.map (fun (x : trait_clause) -> x.clause_id) clauses) (List.map (fun (x : trait_ref) -> x.trait_id) trs) -let make_subst_from_generics (params : generic_params) (args : generic_args) - (tr_sb_self : trait_instance_id) : subst = +let make_sb_subst_from_generics (params : generic_params) (args : generic_args) + : single_binder_subst = let r_sb_subst = make_region_subst_from_vars params.regions args.regions in let ty_sb_subst = make_type_subst_from_vars params.types args.types in let cg_sb_subst = @@ -301,14 +332,16 @@ let make_subst_from_generics (params : generic_params) (args : generic_args) let tr_sb_subst = make_trait_subst_from_clauses params.trait_clauses args.trait_refs in - subst_free_vars - { r_sb_subst; ty_sb_subst; cg_sb_subst; tr_sb_subst; tr_sb_self } + { r_sb_subst; ty_sb_subst; cg_sb_subst; tr_sb_subst; tr_sb_self = Self } + +let make_subst_from_generics (params : generic_params) (args : generic_args) : + subst = + subst_free_vars (make_sb_subst_from_generics params args) let make_subst_from_generics_erase_regions (params : generic_params) - (generics : generic_args) (tr_self : trait_instance_id) = + (generics : generic_args) : subst = let generics = generic_args_erase_regions generics in - let tr_self = trait_instance_id_erase_regions tr_self in - let subst = make_subst_from_generics params generics tr_self in + let subst = make_subst_from_generics params generics in { subst with r_subst = (fun _ -> RErased) } (** Instantiate the type variables in an ADT definition, and return, for @@ -319,9 +352,7 @@ let make_subst_from_generics_erase_regions (params : generic_params) *) let type_decl_get_instantiated_variants_fields_types (def : type_decl) (generics : generic_args) : (VariantId.id option * ty list) list = - (* There shouldn't be any reference to Self *) - let tr_self = UnknownTrait __FUNCTION__ in - let subst = make_subst_from_generics def.generics generics tr_self in + let subst = make_subst_from_generics def.generics generics in let (variants_fields : (VariantId.id option * field list) list) = match def.kind with | Enum variants -> @@ -349,9 +380,7 @@ let type_decl_get_instantiated_field_types (def : type_decl) (* For now, check that there are no clauses - otherwise we might need to normalize the types *) assert (def.generics.trait_clauses = []); - (* There shouldn't be any reference to Self *) - let tr_self = UnknownTrait __FUNCTION__ in - let subst = make_subst_from_generics def.generics generics tr_self in + let subst = make_subst_from_generics def.generics generics in let fields = type_decl_get_fields def opt_variant_id in List.map (fun f -> ty_substitute subst f.field_ty) fields @@ -411,5 +440,73 @@ let statement_substitute_ids (ty_subst : TypeVarId.id -> TypeVarId.id) method! visit_const_generic_var_id _ id = cg_subst id end in - visitor#visit_ty () ty + +(** Remove this binder by substituting the provided arguments for each bound + variable. The `substitutor` argument must be the appropriate + `st_substitute_visitor` method. *) +let apply_args_to_binder (args : generic_args) (substitutor : subst -> 'a -> 'a) + (binder : 'a binder) : 'a = + substitutor + (subst_remove_binder_zero + (make_sb_subst_from_generics binder.binder_params args)) + binder.binder_value + +(** Remove this binder by substituting the provided arguments for each bound + variable. The `substitutor` argument must be the appropriate + `st_substitute_visitor` method. *) +let apply_args_to_item_binder (args : generic_args) + (substitutor : subst -> 'a -> 'a) (binder : 'a item_binder) : 'a = + substitutor + (subst_free_vars + (make_sb_subst_from_generics binder.item_binder_params args)) + binder.item_binder_value + +(** Helper *) +let instantiate_method item_generics method_generics + (bound_fn : fun_decl_ref binder item_binder) : fun_decl_ref = + apply_args_to_binder method_generics st_substitute_visitor#visit_fun_decl_ref + (apply_args_to_item_binder item_generics + (st_substitute_visitor#visit_binder + st_substitute_visitor#visit_fun_decl_ref) + bound_fn) + +(** Like lookup_trait_decl_provided_method, but also correctly substitutes the generics. *) +let lookup_and_subst_trait_decl_method (tdecl : trait_decl) + (name : trait_item_name) decl_generics method_generics : fun_decl_ref option + = + Option.map + (instantiate_method decl_generics method_generics) + (lookup_trait_decl_method tdecl name) + +(** Like lookup_trait_decl_provided_method, but also correctly substitutes the generics. *) +let lookup_and_subst_trait_decl_provided_method (tdecl : trait_decl) + (name : trait_item_name) decl_generics method_generics : fun_decl_ref option + = + Option.map + (instantiate_method decl_generics method_generics) + (lookup_trait_decl_provided_method tdecl name) + +(** Like lookup_trait_decl_required_method, but also correctly substitutes the generics. *) +let lookup_and_subst_trait_decl_required_method (tdecl : trait_decl) + (name : trait_item_name) decl_generics method_generics : fun_decl_ref option + = + Option.map + (instantiate_method decl_generics method_generics) + (lookup_trait_decl_required_method tdecl name) + +(** Like lookup_trait_impl_provided_method, but also correctly substitutes the generics. *) +let lookup_and_subst_trait_impl_provided_method (timpl : trait_impl) + (name : trait_item_name) impl_generics method_generics : fun_decl_ref option + = + Option.map + (instantiate_method impl_generics method_generics) + (lookup_trait_impl_provided_method timpl name) + +(** Like lookup_trait_impl_required_method, but also correctly substitutes the generics. *) +let lookup_and_subst_trait_impl_required_method (timpl : trait_impl) + (name : trait_item_name) impl_generics method_generics : fun_decl_ref option + = + Option.map + (instantiate_method impl_generics method_generics) + (lookup_trait_impl_required_method timpl name) diff --git a/charon-ml/src/TypesUtils.ml b/charon-ml/src/TypesUtils.ml index 0d32f668..df000abc 100644 --- a/charon-ml/src/TypesUtils.ml +++ b/charon-ml/src/TypesUtils.ml @@ -147,20 +147,6 @@ let empty_generic_params : generic_params = trait_type_constraints = []; } -let merge_generic_args (g1 : generic_args) (g2 : generic_args) : generic_args = - let { regions = r1; types = tys1; const_generics = cgs1; trait_refs = tr1 } = - g1 - in - let { regions = r2; types = tys2; const_generics = cgs2; trait_refs = tr2 } = - g2 - in - { - regions = r1 @ r2; - types = tys1 @ tys2; - const_generics = cgs1 @ cgs2; - trait_refs = tr1 @ tr2; - } - let generic_args_of_params span (generics : generic_params) : generic_args = let regions = List.map (fun (v : region_var) -> RVar (Free v.index)) generics.regions diff --git a/charon-ml/src/generated/Generated_GAst.ml b/charon-ml/src/generated/Generated_GAst.ml index 3daae364..010ce869 100644 --- a/charon-ml/src/generated/Generated_GAst.ml +++ b/charon-ml/src/generated/Generated_GAst.ml @@ -187,7 +187,9 @@ type global_decl = { kind : item_kind; (** The global kind: "regular" function, trait const declaration, etc. *) body : fun_decl_id; - (** The initializer function used to compute the initial value for this constant/static. *) + (** The initializer function used to compute the initial value for this constant/static. It + uses the same generic parameters as the global. + *) } [@@deriving show, @@ -262,17 +264,19 @@ type trait_decl = { (** The associated constants declared in the trait, along with their type. *) types : trait_item_name list; (** The associated types declared in the trait. *) - required_methods : (trait_item_name * fun_decl_id) list; - (** The *required* methods. - - The required methods are the methods declared by the trait but with no default + required_methods : (trait_item_name * fun_decl_ref binder) list; + (** The *required* methods: the methods declared by the trait but with no default implementation. The corresponding `FunDecl`s don't have a body. - *) - provided_methods : (trait_item_name * fun_decl_id) list; - (** The *provided* methods. - The provided methods are the methods with a default implementation. The corresponding + The binder contains the type parameters specific to the method. The `FunDeclRef` then + provides a full list of arguments to the pointed-to function. + *) + provided_methods : (trait_item_name * fun_decl_ref binder) list; + (** The *provided* methods: the methods with a default implementation. The corresponding `FunDecl`s may have a body, according to the usual rules for extracting function bodies. + + The binder contains the type parameters specific to the method. The `FunDeclRef` then + provides a full list of arguments to the pointed-to function. *) } [@@deriving @@ -319,10 +323,18 @@ type trait_impl = { (** The associated constants declared in the trait. *) types : (trait_item_name * ty) list; (** The associated types declared in the trait. *) - required_methods : (trait_item_name * fun_decl_id) list; - (** The implemented required methods *) - provided_methods : (trait_item_name * fun_decl_id) list; - (** The re-implemented provided methods *) + required_methods : (trait_item_name * fun_decl_ref binder) list; + (** The implemented required methods + + The binder contains the type parameters specific to the method. The `FunDeclRef` then + provides a full list of arguments to the pointed-to function. + *) + provided_methods : (trait_item_name * fun_decl_ref binder) list; + (** The re-implemented provided methods + + The binder contains the type parameters specific to the method. The `FunDeclRef` then + provides a full list of arguments to the pointed-to function. + *) } [@@deriving show, diff --git a/charon-ml/src/generated/Generated_GAstOfJson.ml b/charon-ml/src/generated/Generated_GAstOfJson.ml index fc101688..a28270ad 100644 --- a/charon-ml/src/generated/Generated_GAstOfJson.ml +++ b/charon-ml/src/generated/Generated_GAstOfJson.ml @@ -408,6 +408,16 @@ and item_kind_of_json (ctx : of_json_ctx) (js : json) : Ok (TraitImplItem (impl_ref, trait_ref, item_name, reuses_default)) | _ -> Error "") +and fun_decl_ref_of_json (ctx : of_json_ctx) (js : json) : + (fun_decl_ref, string) result = + combine_error_msgs js __FUNCTION__ + (match js with + | `Assoc [ ("id", id); ("generics", generics) ] -> + let* fun_id = fun_decl_id_of_json ctx id in + let* fun_generics = generic_args_of_json ctx generics in + Ok ({ fun_id; fun_generics } : fun_decl_ref) + | _ -> Error "") + and global_decl_of_json (ctx : of_json_ctx) (js : json) : (global_decl, string) result = combine_error_msgs js __FUNCTION__ @@ -480,12 +490,14 @@ and trait_decl_of_json (ctx : of_json_ctx) (js : json) : let* types = list_of_json trait_item_name_of_json ctx types in let* required_methods = list_of_json - (pair_of_json trait_item_name_of_json fun_decl_id_of_json) + (pair_of_json trait_item_name_of_json + (binder_of_json fun_decl_ref_of_json)) ctx required_methods in let* provided_methods = list_of_json - (pair_of_json trait_item_name_of_json fun_decl_id_of_json) + (pair_of_json trait_item_name_of_json + (binder_of_json fun_decl_ref_of_json)) ctx provided_methods in Ok @@ -539,12 +551,14 @@ and trait_impl_of_json (ctx : of_json_ctx) (js : json) : in let* required_methods = list_of_json - (pair_of_json trait_item_name_of_json fun_decl_id_of_json) + (pair_of_json trait_item_name_of_json + (binder_of_json fun_decl_ref_of_json)) ctx required_methods in let* provided_methods = list_of_json - (pair_of_json trait_item_name_of_json fun_decl_id_of_json) + (pair_of_json trait_item_name_of_json + (binder_of_json fun_decl_ref_of_json)) ctx provided_methods in Ok diff --git a/charon-ml/src/generated/Generated_Types.ml b/charon-ml/src/generated/Generated_Types.ml index 619debed..d0c6a6ea 100644 --- a/charon-ml/src/generated/Generated_Types.ml +++ b/charon-ml/src/generated/Generated_Types.ml @@ -434,8 +434,14 @@ class virtual ['self] map_ty_base_base = { binder_regions; binder_value } end +(** Reference to a function declaration. *) +type fun_decl_ref = { + fun_id : fun_decl_id; + fun_generics : generic_args; (** Generic arguments passed to the function. *) +} + (** Reference to a global declaration. *) -type global_decl_ref = { +and global_decl_ref = { global_id : global_decl_id; global_generics : generic_args; } diff --git a/charon/Cargo.lock b/charon/Cargo.lock index e58c5dbc..4535df23 100644 --- a/charon/Cargo.lock +++ b/charon/Cargo.lock @@ -213,7 +213,7 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "charon" -version = "0.1.59" +version = "0.1.60" dependencies = [ "annotate-snippets", "anstream", diff --git a/charon/Cargo.toml b/charon/Cargo.toml index 0dfd5043..8579aee2 100644 --- a/charon/Cargo.toml +++ b/charon/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "charon" -version = "0.1.59" +version = "0.1.60" authors = ["Son Ho "] edition = "2021" license = "Apache-2.0" diff --git a/charon/src/ast/gast.rs b/charon/src/ast/gast.rs index ccb8c66b..e4db56ac 100644 --- a/charon/src/ast/gast.rs +++ b/charon/src/ast/gast.rs @@ -99,6 +99,7 @@ pub enum ItemKind { /// The trait declaration this item belongs to. trait_ref: TraitDeclRef, /// The name of the item. + // TODO: also include method generics so we can recover a full `FnPtr::TraitMethod` #[drive(skip)] item_name: TraitItemName, /// Whether the trait declaration provides a default implementation. @@ -112,6 +113,7 @@ pub enum ItemKind { /// The trait declaration that the impl block implements. trait_ref: TraitDeclRef, /// The name of the item + // TODO: also include method generics so we can recover a full `FnPtr::TraitMethod` #[drive(skip)] item_name: TraitItemName, /// True if the trait decl had a default implementation for this function/const and this @@ -142,6 +144,16 @@ pub struct FunDecl { pub body: Result, } +/// Reference to a function declaration. +#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash, Drive, DriveMut)] +pub struct FunDeclRef { + #[charon::rename("fun_id")] + pub id: FunDeclId, + /// Generic arguments passed to the function. + #[charon::rename("fun_generics")] + pub generics: GenericArgs, +} + /// A global variable definition (constant or static). #[derive(Debug, Clone, Serialize, Deserialize, Drive, DriveMut)] pub struct GlobalDecl { @@ -153,7 +165,8 @@ pub struct GlobalDecl { pub ty: Ty, /// The global kind: "regular" function, trait const declaration, etc. pub kind: ItemKind, - /// The initializer function used to compute the initial value for this constant/static. + /// The initializer function used to compute the initial value for this constant/static. It + /// uses the same generic parameters as the global. #[charon::rename("body")] pub init: FunDeclId, } @@ -241,16 +254,18 @@ pub struct TraitDecl { /// TODO: Do this as we translate to avoid the need to store this vector. #[charon::opaque] pub type_clauses: Vec<(TraitItemName, Vector)>, - /// The *required* methods. - /// - /// The required methods are the methods declared by the trait but with no default + /// The *required* methods: the methods declared by the trait but with no default /// implementation. The corresponding `FunDecl`s don't have a body. - pub required_methods: Vec<(TraitItemName, FunDeclId)>, - /// The *provided* methods. /// - /// The provided methods are the methods with a default implementation. The corresponding + /// The binder contains the type parameters specific to the method. The `FunDeclRef` then + /// provides a full list of arguments to the pointed-to function. + pub required_methods: Vec<(TraitItemName, Binder)>, + /// The *provided* methods: the methods with a default implementation. The corresponding /// `FunDecl`s may have a body, according to the usual rules for extracting function bodies. - pub provided_methods: Vec<(TraitItemName, FunDeclId)>, + /// + /// The binder contains the type parameters specific to the method. The `FunDeclRef` then + /// provides a full list of arguments to the pointed-to function. + pub provided_methods: Vec<(TraitItemName, Binder)>, } /// A trait **implementation**. @@ -284,9 +299,15 @@ pub struct TraitImpl { #[charon::opaque] pub type_clauses: Vec<(TraitItemName, Vector)>, /// The implemented required methods - pub required_methods: Vec<(TraitItemName, FunDeclId)>, + /// + /// The binder contains the type parameters specific to the method. The `FunDeclRef` then + /// provides a full list of arguments to the pointed-to function. + pub required_methods: Vec<(TraitItemName, Binder)>, /// The re-implemented provided methods - pub provided_methods: Vec<(TraitItemName, FunDeclId)>, + /// + /// The binder contains the type parameters specific to the method. The `FunDeclRef` then + /// provides a full list of arguments to the pointed-to function. + pub provided_methods: Vec<(TraitItemName, Binder)>, } /// A function operand is used in function calls. diff --git a/charon/src/ast/krate.rs b/charon/src/ast/krate.rs index d21745ae..e6bcca84 100644 --- a/charon/src/ast/krate.rs +++ b/charon/src/ast/krate.rs @@ -2,7 +2,7 @@ use crate::ast::*; use crate::formatter::{FmtCtx, Formatter, IntoFormatter}; use crate::ids::Vector; use crate::reorder_decls::DeclarationsGroups; -use derive_generic_visitor::{Drive, DriveMut}; +use derive_generic_visitor::{ControlFlow, Drive, DriveMut}; use hashlink::LinkedHashSet; use macros::{EnumAsGetters, EnumIsA, VariantIndexArity, VariantName}; use serde::{Deserialize, Serialize}; @@ -10,7 +10,6 @@ use serde_map_to_array::HashMapToArray; use std::cmp::{Ord, PartialOrd}; use std::collections::HashMap; use std::fmt; -use std::ops::{ControlFlow, Index, IndexMut}; generate_index_type!(FunDeclId, "Fun"); generate_index_type!(TypeDeclId, "Adt"); @@ -315,19 +314,21 @@ impl<'tcx, 'ctx, 'a> IntoFormatter for &'a TranslatedCrate { /// Delegate `Index` implementations to subfields. macro_rules! mk_index_impls { ($ty:ident.$field:ident[$idx:ty]: $output:ty) => { - impl Index<$idx> for $ty { + impl std::ops::Index<$idx> for $ty { type Output = $output; fn index(&self, index: $idx) -> &Self::Output { &self.$field[index] } } - impl IndexMut<$idx> for $ty { + impl std::ops::IndexMut<$idx> for $ty { fn index_mut(&mut self, index: $idx) -> &mut Self::Output { &mut self.$field[index] } } }; } +pub(crate) use mk_index_impls; + mk_index_impls!(TranslatedCrate.type_decls[TypeDeclId]: TypeDecl); mk_index_impls!(TranslatedCrate.fun_decls[FunDeclId]: FunDecl); mk_index_impls!(TranslatedCrate.global_decls[GlobalDeclId]: GlobalDecl); diff --git a/charon/src/ast/types_utils.rs b/charon/src/ast/types_utils.rs index ef2afb7b..7b7aac53 100644 --- a/charon/src/ast/types_utils.rs +++ b/charon/src/ast/types_utils.rs @@ -5,6 +5,7 @@ use derive_generic_visitor::*; use std::collections::HashSet; use std::convert::Infallible; use std::iter::Iterator; +use std::ops::Index; impl GenericParams { pub fn empty() -> Self { @@ -71,18 +72,23 @@ impl GenericParams { /// each required parameter with itself. E.g. given parameters for ` where U: /// PartialEq`, the arguments would be `[@TraitClause0]`. pub fn identity_args(&self) -> GenericArgs { + self.identity_args_at_depth(DeBruijnId::zero()) + } + + /// Like `identity_args` but uses variables bound at the given depth. + pub fn identity_args_at_depth(&self, depth: DeBruijnId) -> GenericArgs { GenericArgs { regions: self .regions - .map_ref_indexed(|id, _| Region::Var(DeBruijnVar::new_at_zero(id))), + .map_ref_indexed(|id, _| Region::Var(DeBruijnVar::bound(depth, id))), types: self .types - .map_ref_indexed(|id, _| TyKind::TypeVar(DeBruijnVar::new_at_zero(id)).into_ty()), + .map_ref_indexed(|id, _| TyKind::TypeVar(DeBruijnVar::bound(depth, id)).into_ty()), const_generics: self .const_generics - .map_ref_indexed(|id, _| ConstGeneric::Var(DeBruijnVar::new_at_zero(id))), + .map_ref_indexed(|id, _| ConstGeneric::Var(DeBruijnVar::bound(depth, id))), trait_refs: self.trait_clauses.map_ref_indexed(|id, clause| TraitRef { - kind: TraitRefKind::Clause(DeBruijnVar::new_at_zero(id)), + kind: TraitRefKind::Clause(DeBruijnVar::bound(depth, id)), trait_decl_ref: clause.trait_.clone(), }), } @@ -108,6 +114,27 @@ impl GenericParams { } } +impl Binder { + pub fn new(params: GenericParams, skip_binder: T) -> Self { + Self { + params, + skip_binder, + } + } + + /// Substitute the provided arguments for the variables bound in this binder and return the + /// substituted inner value. + pub fn apply(self, args: &GenericArgs) -> T + where + T: AstVisitable, + { + let mut val = self.skip_binder; + assert!(args.matches(&self.params)); + val.drive_mut(&mut SubstVisitor::new(args)); + val + } +} + impl GenericArgs { pub fn len(&self) -> usize { let GenericArgs { @@ -416,8 +443,31 @@ impl<'a> SubstVisitor<'a> { } } - fn should_subst(&self, var: DeBruijnVar) -> Option { - var.bound_at_depth(self.binder_depth) + /// Process the variable, either modifying the variable in-place or returning the new value to + /// assign to the type/region/const generic/trait ref that was this variable. + fn process_var(&self, var: &mut DeBruijnVar) -> Option + where + Id: Copy, + GenericArgs: Index, + T: Clone + TyVisitable, + { + use std::cmp::Ordering::*; + match var { + DeBruijnVar::Bound(dbid, varid) => match (*dbid).cmp(&self.binder_depth) { + Equal => Some( + self.generics[*varid] + .clone() + .move_under_binders(self.binder_depth), + ), + Greater => { + // This is bound outside the binder we're substituting for. + *dbid = dbid.decr(); + None + } + Less => None, + }, + DeBruijnVar::Free(..) => None, + } } } @@ -438,8 +488,8 @@ impl VisitAstMut for SubstVisitor<'_> { fn exit_region(&mut self, r: &mut Region) { match r { Region::Var(var) => { - if let Some(varid) = self.should_subst(*var) { - *r = self.generics.regions[varid].move_under_binders(self.binder_depth) + if let Some(new_r) = self.process_var(var) { + *r = new_r; } } _ => (), @@ -447,25 +497,20 @@ impl VisitAstMut for SubstVisitor<'_> { } fn exit_ty(&mut self, ty: &mut Ty) { - match ty.kind() { - TyKind::TypeVar(var) => { - if let Some(id) = self.should_subst(*var) { - *ty = self.generics.types[id] - .clone() - .move_under_binders(self.binder_depth) - } - } - _ => (), + let new_ty = ty.with_kind_mut(|kind| match kind { + TyKind::TypeVar(var) => self.process_var(var), + _ => None, + }); + if let Some(new_ty) = new_ty { + *ty = new_ty } } fn exit_const_generic(&mut self, cg: &mut ConstGeneric) { match cg { ConstGeneric::Var(var) => { - if let Some(id) = self.should_subst(*var) { - *cg = self.generics.const_generics[id] - .clone() - .move_under_binders(self.binder_depth) + if let Some(new_cg) = self.process_var(var) { + *cg = new_cg; } } _ => (), @@ -475,10 +520,8 @@ impl VisitAstMut for SubstVisitor<'_> { fn exit_trait_ref(&mut self, tr: &mut TraitRef) { match &mut tr.kind { TraitRefKind::Clause(var) => { - if let Some(id) = self.should_subst(*var) { - *tr = self.generics.trait_refs[id] - .clone() - .move_under_binders(self.binder_depth) + if let Some(new_tr) = self.process_var(var) { + *tr = new_tr; } } _ => (), @@ -574,3 +617,12 @@ impl PartialEq for TraitClause { } impl Eq for TraitClause {} + +mk_index_impls!(GenericArgs.regions[RegionId]: Region); +mk_index_impls!(GenericArgs.types[TypeVarId]: Ty); +mk_index_impls!(GenericArgs.const_generics[ConstGenericVarId]: ConstGeneric); +mk_index_impls!(GenericArgs.trait_refs[TraitClauseId]: TraitRef); +mk_index_impls!(GenericParams.regions[RegionId]: RegionVar); +mk_index_impls!(GenericParams.types[TypeVarId]: TypeVar); +mk_index_impls!(GenericParams.const_generics[ConstGenericVarId]: ConstGenericVar); +mk_index_impls!(GenericParams.trait_clauses[TraitClauseId]: TraitClause); diff --git a/charon/src/ast/visitor.rs b/charon/src/ast/visitor.rs index 901627c5..e9be37b8 100644 --- a/charon/src/ast/visitor.rs +++ b/charon/src/ast/visitor.rs @@ -63,7 +63,8 @@ use index_vec::Idx; // type but can be overridden. override( DeBruijnId, Ty, Region, ConstGeneric, TraitRef, - GlobalDeclRef, TraitDeclRef, TraitImplRef, GenericArgs, GenericParams, + FunDeclRef, GlobalDeclRef, TraitDeclRef, TraitImplRef, + GenericArgs, GenericParams, for DeBruijnVar, for RegionBinder, for Binder, diff --git a/charon/src/bin/charon-driver/translate/translate_ctx.rs b/charon/src/bin/charon-driver/translate/translate_ctx.rs index a4e145ad..22cdbd43 100644 --- a/charon/src/bin/charon-driver/translate/translate_ctx.rs +++ b/charon/src/bin/charon-driver/translate/translate_ctx.rs @@ -1242,6 +1242,35 @@ impl<'tcx, 'ctx> BodyTransCtx<'tcx, 'ctx> { }) } + /// Push a new binding level corresponding to the provided `def` for the duration of the inner + /// function call. + pub(crate) fn translate_binder_for_def( + &mut self, + span: Span, + def: &hax::FullDef, + f: F, + ) -> Result, Error> + where + F: FnOnce(&mut Self) -> Result, + { + assert!(!self.binding_levels.is_empty()); + + // Register the type-level parameters. This pushes a new binding level. + self.translate_def_generics_without_parents(span, def)?; + + // Call the continuation. Important: do not short-circuit on error here. + let res = f(self); + + // Reset + let params = self.binding_levels.pop_front().unwrap().params; + + // Return + res.map(|skip_binder| Binder { + params, + skip_binder, + }) + } + pub(crate) fn push_var(&mut self, rid: usize, ty: Ty, name: Option) { let var_id = self.locals.vars.push_with(|index| Var { index, name, ty }); self.vars_map.insert(rid, var_id); diff --git a/charon/src/bin/charon-driver/translate/translate_traits.rs b/charon/src/bin/charon-driver/translate/translate_traits.rs index 86b1e8d1..22ebd791 100644 --- a/charon/src/bin/charon-driver/translate/translate_traits.rs +++ b/charon/src/bin/charon-driver/translate/translate_traits.rs @@ -83,17 +83,36 @@ impl BodyTransCtx<'_, '_> { let mut required_methods = Vec::new(); let mut provided_methods = Vec::new(); for (item_name, hax_item, hax_def) in &items { - let rust_item_id = DefId::from(&hax_item.def_id); - let item_span = self.def_span(rust_item_id); + let item_def_id = DefId::from(&hax_item.def_id); + let item_span = self.def_span(item_def_id); match &hax_def.kind { hax::FullDefKind::AssocFn { .. } => { - let fun_id = self.register_fun_decl_id(item_span, rust_item_id); + let fun_def = self.t_ctx.hax_def(item_def_id)?; + let fn_ref = self.translate_binder_for_def(item_span, &fun_def, |bt_ctx| { + let fun_id = bt_ctx.register_fun_decl_id(item_span, item_def_id); + // TODO: there's probably a cleaner way to write this + assert_eq!(bt_ctx.binding_levels.len(), 2); + let fun_generics = bt_ctx + .outermost_binder() + .params + .identity_args_at_depth(DeBruijnId::one()) + .concat( + &bt_ctx + .innermost_binder() + .params + .identity_args_at_depth(DeBruijnId::zero()), + ); + Ok(FunDeclRef { + id: fun_id, + generics: fun_generics, + }) + })?; if hax_item.has_value { // This is a provided method, - provided_methods.push((item_name.clone(), fun_id)); + provided_methods.push((item_name.clone(), fn_ref)); } else { // This is a required method (no default implementation) - required_methods.push((item_name.clone(), fun_id)); + required_methods.push((item_name.clone(), fn_ref)); } } hax::FullDefKind::AssocConst { ty, .. } => { @@ -102,7 +121,7 @@ impl BodyTransCtx<'_, '_> { // The parameters of the constant are the same as those of the item that // declares them. let gref = GlobalDeclRef { - id: self.register_global_decl_id(item_span, rust_item_id), + id: self.register_global_decl_id(item_span, item_def_id), generics: self.the_only_binder().params.identity_args(), }; const_defaults.insert(item_name.clone(), gref); @@ -229,10 +248,30 @@ impl BodyTransCtx<'_, '_> { let fun_id = self.register_fun_decl_id(item_span, item_def_id); match &impl_item.value { Provided { is_override, .. } => { + let fun_def = self.t_ctx.hax_def(item_def_id)?; + let fn_ref = + self.translate_binder_for_def(item_span, &fun_def, |bt_ctx| { + // TODO: there's probably a cleaner way to write this + assert_eq!(bt_ctx.binding_levels.len(), 2); + let fun_generics = bt_ctx + .outermost_binder() + .params + .identity_args_at_depth(DeBruijnId::one()) + .concat( + &bt_ctx + .innermost_binder() + .params + .identity_args_at_depth(DeBruijnId::zero()), + ); + Ok(FunDeclRef { + id: fun_id, + generics: fun_generics, + }) + })?; if *is_override { - provided_methods.push((name, fun_id)); + provided_methods.push((name, fn_ref)); } else { - required_methods.push((name, fun_id)); + required_methods.push((name, fn_ref)); } } DefaultedFn { .. } => { diff --git a/charon/src/bin/charon-driver/translate/translate_types.rs b/charon/src/bin/charon-driver/translate/translate_types.rs index d7a8447e..04c57fb1 100644 --- a/charon/src/bin/charon-driver/translate/translate_types.rs +++ b/charon/src/bin/charon-driver/translate/translate_types.rs @@ -539,6 +539,18 @@ impl<'tcx, 'ctx> BodyTransCtx<'tcx, 'ctx> { Ok(()) } + /// Translate the generics and predicates of this item without its parents. + pub(crate) fn translate_def_generics_without_parents( + &mut self, + span: Span, + def: &hax::FullDef, + ) -> Result<(), Error> { + self.binding_levels.push_front(BindingLevel::new(true)); + self.push_generics_for_def_without_parents(span, def, true, true)?; + self.innermost_binder().params.check_consistency(); + Ok(()) + } + pub(crate) fn into_generics(mut self) -> GenericParams { assert!(self.binding_levels.len() == 1); self.binding_levels.pop_back().unwrap().params diff --git a/charon/src/bin/generate-ml/main.rs b/charon/src/bin/generate-ml/main.rs index 48270b4e..b60bd70f 100644 --- a/charon/src/bin/generate-ml/main.rs +++ b/charon/src/bin/generate-ml/main.rs @@ -1274,6 +1274,7 @@ fn generate_ml( "TraitRefKind", "TraitDeclRef", "TraitImplRef", + "FunDeclRef", "GlobalDeclRef", "GenericArgs", ]), diff --git a/charon/src/pretty/fmt_with_ctx.rs b/charon/src/pretty/fmt_with_ctx.rs index bff4d2b0..962317ab 100644 --- a/charon/src/pretty/fmt_with_ctx.rs +++ b/charon/src/pretty/fmt_with_ctx.rs @@ -9,7 +9,10 @@ use crate::{ ullbc_ast::{self as ullbc, *}, }; use itertools::Itertools; -use std::fmt::{self, Display, Write}; +use std::{ + borrow::Cow, + fmt::{self, Display, Write}, +}; /// Format the AST type as a string. pub trait FmtWithCtx { @@ -77,6 +80,22 @@ impl FmtWithCtx for Assert { } } +impl Binder { + /// Format the parameters and contents of this binder and returns the resulting strings. Note: + /// this assumes the binder fully replaces the existing generics. + fn fmt_split<'a, C>(&'a self, ctx: &'a C) -> (String, String) + where + C: AstFormatter, + T: FmtWithCtx<>::C>, + { + let ctx = &ctx.push_binder(Cow::Borrowed(&self.params)); + ( + self.params.fmt_with_ctx_single_line(ctx), + self.skip_binder.fmt_with_ctx(ctx), + ) + } +} + impl FmtWithCtx for llbc::Block { fn fmt_with_ctx(&self, ctx: &C) -> String { // By default use a tab. @@ -531,6 +550,14 @@ where } } +impl FmtWithCtx for FunDeclRef { + fn fmt_with_ctx(&self, ctx: &C) -> String { + let id = ctx.format_object(self.id); + let generics = self.generics.fmt_with_ctx(ctx); + format!("{id}{generics}") + } +} + impl FmtWithCtx for GlobalDecl where C: AstFormatter, @@ -565,9 +592,9 @@ where impl FmtWithCtx for GlobalDeclRef { fn fmt_with_ctx(&self, ctx: &C) -> String { - let global_id = ctx.format_object(self.id); + let id = ctx.format_object(self.id); let generics = self.generics.fmt_with_ctx(ctx); - format!("{global_id}{generics}") + format!("{id}{generics}") } } @@ -1106,44 +1133,47 @@ impl FmtWithCtx for TraitDecl { let (generics, clauses) = self.generics.fmt_with_ctx_with_trait_clauses(ctx, ""); let items = { - let items = - self.parent_clauses - .iter() - .map(|c| { - format!( - "{TAB_INCR}parent_clause{} : {}\n", - c.clause_id, - c.fmt_with_ctx(ctx) - ) - }) - .chain(self.type_clauses.iter().map(|(name, clauses)| { - clauses - .iter() - .map(|c| { - format!( - "{TAB_INCR}item_clause_{name}_{} : {}\n", - c.clause_id.to_string(), - c.fmt_with_ctx(ctx) - ) - }) - .collect() - })) - .chain(self.consts.iter().map(|(name, ty)| { - let ty = ty.fmt_with_ctx(ctx); - format!("{TAB_INCR}const {name} : {ty}\n") - })) - .chain( - self.types - .iter() - .map(|name| format!("{TAB_INCR}type {name}\n")), + let items = self + .parent_clauses + .iter() + .map(|c| { + format!( + "{TAB_INCR}parent_clause{} : {}\n", + c.clause_id, + c.fmt_with_ctx(ctx) ) - .chain(self.required_methods.iter().map(|(name, f)| { - format!("{TAB_INCR}fn {name} : {}\n", ctx.format_object(*f)) - })) - .chain(self.provided_methods.iter().map(|(name, f)| { - format!("{TAB_INCR}fn {name} : {}\n", ctx.format_object(*f)) - })) - .collect::>(); + }) + .chain(self.type_clauses.iter().map(|(name, clauses)| { + clauses + .iter() + .map(|c| { + format!( + "{TAB_INCR}item_clause_{name}_{} : {}\n", + c.clause_id.to_string(), + c.fmt_with_ctx(ctx) + ) + }) + .collect() + })) + .chain(self.consts.iter().map(|(name, ty)| { + let ty = ty.fmt_with_ctx(ctx); + format!("{TAB_INCR}const {name} : {ty}\n") + })) + .chain( + self.types + .iter() + .map(|name| format!("{TAB_INCR}type {name}\n")), + ) + .chain( + self.required_methods + .iter() + .chain(self.provided_methods.iter()) + .map(|(name, bound_fn)| { + let (params, fn_ref) = bound_fn.fmt_split(ctx); + format!("{TAB_INCR}fn {name}{params} = {fn_ref}\n",) + }), + ) + .collect::>(); if items.is_empty() { "".to_string() } else { @@ -1206,8 +1236,9 @@ impl FmtWithCtx for TraitImpl { self.required_methods .iter() .chain(self.provided_methods.iter()) - .map(|(name, f)| { - format!("{TAB_INCR}fn {name} = {}\n", ctx.format_object(*f)) + .map(|(name, bound_fn)| { + let (params, fn_ref) = bound_fn.fmt_split(ctx); + format!("{TAB_INCR}fn {name}{params} = {fn_ref}\n",) }), ) .collect::>(); diff --git a/charon/src/transform/check_generics.rs b/charon/src/transform/check_generics.rs index 6ca41271..964c9208 100644 --- a/charon/src/transform/check_generics.rs +++ b/charon/src/transform/check_generics.rs @@ -28,15 +28,20 @@ impl CheckGenericsVisitor<'_> { self.discharged_args += 1; } - fn generics_should_match_item(&mut self, args: &GenericArgs, item_id: impl Into) { + fn generics_should_match(&mut self, args: &GenericArgs, params: &GenericParams) { self.discharged_one_generics(); + if !args.matches(params) { + self.error(format!( + "Mismatched generics:\nexpected: {params:?}\n got: {args:?}" + )) + } + } + fn generics_should_match_item(&mut self, args: &GenericArgs, item_id: impl Into) { if let Some(item) = self.translated.get_item(item_id.into()) { let params = item.generic_params(); - if !args.matches(params) { - self.error(format!( - "Mismatched generics:\nexpected: {params:?}\n got: {args:?}" - )) - } + self.generics_should_match(args, params); + } else { + self.discharged_one_generics(); } } fn check_typeid_generics(&mut self, args: &GenericArgs, ty_kind: &TypeId) { @@ -80,14 +85,23 @@ impl VisitAst for CheckGenericsVisitor<'_> { let args = &fn_ptr.generics; self.generics_should_match_item(args, *id); } - FunIdOrTraitMethodRef::Trait(tref, _, id) => { - let args = tref - .trait_decl_ref - .skip_binder - .generics - .clone() - .concat(&fn_ptr.generics); - self.generics_should_match_item(&args, *id); + FunIdOrTraitMethodRef::Trait(tref, method, _) => { + let trait_id = tref.trait_decl_ref.skip_binder.trait_id; + if let Some(trait_decl) = self.translated.trait_decls.get(trait_id) { + if let Some((_, bound_fn)) = trait_decl + .required_methods + .iter() + .chain(trait_decl.provided_methods.iter()) + .find(|(n, _)| n == method) + { + // Function generics should match expected method generics. + self.generics_should_match(&fn_ptr.generics, &bound_fn.params); + } else { + self.discharged_one_generics() + } + } else { + self.discharged_one_generics() + } } FunIdOrTraitMethodRef::Fun(FunId::Builtin(..)) => { // TODO: check generics for built-in types @@ -95,6 +109,9 @@ impl VisitAst for CheckGenericsVisitor<'_> { } } } + fn enter_fun_decl_ref(&mut self, fun_ref: &FunDeclRef) { + self.generics_should_match_item(&fun_ref.generics, fun_ref.id); + } fn enter_global_decl_ref(&mut self, global_ref: &GlobalDeclRef) { self.generics_should_match_item(&global_ref.generics, global_ref.id); } diff --git a/charon/src/transform/reorder_decls.rs b/charon/src/transform/reorder_decls.rs index e212d722..13656fa1 100644 --- a/charon/src/transform/reorder_decls.rs +++ b/charon/src/transform/reorder_decls.rs @@ -392,8 +392,7 @@ fn compute_declarations_graph<'tcx>(ctx: &'tcx TransformCtx) -> Deps { let method_ids = required_methods .iter() .chain(provided_methods.iter()) - .map(|(_, id)| id) - .copied(); + .map(|(_, bound_fun)| bound_fun.skip_binder.id); for id in method_ids { // Important: we must ignore the function id, because // otherwise in the presence of associated types we may diff --git a/charon/src/transform/skip_trait_refs_when_known.rs b/charon/src/transform/skip_trait_refs_when_known.rs index 23a5d923..a25a8c16 100644 --- a/charon/src/transform/skip_trait_refs_when_known.rs +++ b/charon/src/transform/skip_trait_refs_when_known.rs @@ -1,8 +1,8 @@ -use crate::{transform::TransformCtx, ullbc_ast::*}; +use crate::{register_error_or_panic, transform::TransformCtx, ullbc_ast::*}; use super::ctx::UllbcPass; -fn transform_call(ctx: &TransformCtx, call: &mut Call) { +fn transform_call(ctx: &mut TransformCtx, span: Span, call: &mut Call) { // We find calls to a trait method where the impl is known; otherwise we return. let FnOperand::Regular(fn_ptr) = &mut call.func else { return; @@ -17,7 +17,7 @@ fn transform_call(ctx: &TransformCtx, call: &mut Call) { return; }; // Find the function declaration corresponding to this impl. - let Some((_, fun_decl_id)) = trait_impl + let Some((_, bound_fn)) = trait_impl .required_methods .iter() .chain(trait_impl.provided_methods.iter()) @@ -25,12 +25,24 @@ fn transform_call(ctx: &TransformCtx, call: &mut Call) { else { return; }; - let fn_generics = &fn_ptr.generics; - // Move the trait generics to the function call. - // FIXME: make a better API than `concat`. - fn_ptr.generics = impl_generics.clone().concat(fn_generics); - // Set the call operation to use the function directly. - fn_ptr.func = FunIdOrTraitMethodRef::Fun(FunId::Regular(*fun_decl_id)); + let method_generics = &fn_ptr.generics; + + if !method_generics.matches(&bound_fn.params) { + let message = format!( + "Mismatched method generics:\nparams: {:?}\nsupplied: {:?}", + bound_fn.params, method_generics + ); + register_error_or_panic!(ctx.errors, &ctx.translated, span, message); + } + + // Make the two levels of binding explicit: outer binder for the impl block, inner binder for + // the method. + let fn_ref: Binder> = + Binder::new(trait_impl.generics.clone(), bound_fn.clone()); + // Substitute the appropriate generics into the function call. + let fn_ref = fn_ref.apply(impl_generics).apply(method_generics); + fn_ptr.generics = fn_ref.generics; + fn_ptr.func = FunIdOrTraitMethodRef::Fun(FunId::Regular(fn_ref.id)); } pub struct Transform; @@ -39,7 +51,7 @@ impl UllbcPass for Transform { for block in b.body.iter_mut() { for st in block.statements.iter_mut() { if let RawStatement::Call(call) = &mut st.content { - transform_call(ctx, call) + transform_call(ctx, st.span, call) }; } } diff --git a/charon/tests/cargo/dependencies.out b/charon/tests/cargo/dependencies.out index 380a668f..8ee44738 100644 --- a/charon/tests/cargo/dependencies.out +++ b/charon/tests/cargo/dependencies.out @@ -23,7 +23,7 @@ trait core::ops::function::FnOnce parent_clause1 : [@TraitClause1]: core::marker::Tuple parent_clause2 : [@TraitClause2]: core::marker::Sized type Output - fn call_once : core::ops::function::FnOnce::call_once + fn call_once = core::ops::function::FnOnce::call_once } fn take_mut::take<'_0, T, F>(@1: &'_0 mut (T), @2: F) diff --git a/charon/tests/ui/arrays.out b/charon/tests/ui/arrays.out index 342a3dc7..8fc2d33c 100644 --- a/charon/tests/ui/arrays.out +++ b/charon/tests/ui/arrays.out @@ -254,12 +254,12 @@ trait core::slice::index::SliceIndex { parent_clause0 : [@TraitClause0]: core::slice::index::private_slice_index::Sealed type Output - fn get : core::slice::index::SliceIndex::get - fn get_mut : core::slice::index::SliceIndex::get_mut - fn get_unchecked : core::slice::index::SliceIndex::get_unchecked - fn get_unchecked_mut : core::slice::index::SliceIndex::get_unchecked_mut - fn index : core::slice::index::SliceIndex::index - fn index_mut : core::slice::index::SliceIndex::index_mut + fn get<'_0> = core::slice::index::SliceIndex::get<'_0_0, Self, T> + fn get_mut<'_0> = core::slice::index::SliceIndex::get_mut<'_0_0, Self, T> + fn get_unchecked = core::slice::index::SliceIndex::get_unchecked + fn get_unchecked_mut = core::slice::index::SliceIndex::get_unchecked_mut + fn index<'_0> = core::slice::index::SliceIndex::index<'_0_0, Self, T> + fn index_mut<'_0> = core::slice::index::SliceIndex::index_mut<'_0_0, Self, T> } fn core::slice::index::{impl core::ops::index::Index for Slice}::index<'_0, T, I>(@1: &'_0 (Slice), @2: I) -> &'_0 (@TraitClause2::Output) @@ -300,12 +300,12 @@ where { parent_clause0 = core::slice::index::private_slice_index::{impl core::slice::index::private_slice_index::Sealed for core::ops::range::Range[core::marker::Sized]}#1 type Output = Slice - fn get = core::slice::index::{impl core::slice::index::SliceIndex> for core::ops::range::Range[core::marker::Sized]}#4::get - fn get_mut = core::slice::index::{impl core::slice::index::SliceIndex> for core::ops::range::Range[core::marker::Sized]}#4::get_mut - fn get_unchecked = core::slice::index::{impl core::slice::index::SliceIndex> for core::ops::range::Range[core::marker::Sized]}#4::get_unchecked - fn get_unchecked_mut = core::slice::index::{impl core::slice::index::SliceIndex> for core::ops::range::Range[core::marker::Sized]}#4::get_unchecked_mut - fn index = core::slice::index::{impl core::slice::index::SliceIndex> for core::ops::range::Range[core::marker::Sized]}#4::index - fn index_mut = core::slice::index::{impl core::slice::index::SliceIndex> for core::ops::range::Range[core::marker::Sized]}#4::index_mut + fn get<'_0> = core::slice::index::{impl core::slice::index::SliceIndex> for core::ops::range::Range[core::marker::Sized]}#4::get<'_0_0, T>[@TraitClause0] + fn get_mut<'_0> = core::slice::index::{impl core::slice::index::SliceIndex> for core::ops::range::Range[core::marker::Sized]}#4::get_mut<'_0_0, T>[@TraitClause0] + fn get_unchecked = core::slice::index::{impl core::slice::index::SliceIndex> for core::ops::range::Range[core::marker::Sized]}#4::get_unchecked[@TraitClause0] + fn get_unchecked_mut = core::slice::index::{impl core::slice::index::SliceIndex> for core::ops::range::Range[core::marker::Sized]}#4::get_unchecked_mut[@TraitClause0] + fn index<'_0> = core::slice::index::{impl core::slice::index::SliceIndex> for core::ops::range::Range[core::marker::Sized]}#4::index<'_0_0, T>[@TraitClause0] + fn index_mut<'_0> = core::slice::index::{impl core::slice::index::SliceIndex> for core::ops::range::Range[core::marker::Sized]}#4::index_mut<'_0_0, T>[@TraitClause0] } fn test_crate::slice_subslice_shared_<'_0>(@1: &'_0 (Slice), @2: usize, @3: usize) -> &'_0 (Slice) @@ -405,7 +405,7 @@ fn test_crate::array_to_slice_mut_<'_0>(@1: &'_0 mut (Array)) - trait core::ops::index::Index { type Output - fn index : core::ops::index::Index::index + fn index<'_0> = core::ops::index::Index::index<'_0_0, Self, Idx> } fn core::array::{impl core::ops::index::Index for Array}#15::index<'_0, T, I, const N : usize>(@1: &'_0 (Array), @2: I) -> &'_0 (core::array::{impl core::ops::index::Index for Array}#15[@TraitClause0, @TraitClause1, @TraitClause2]::Output) @@ -421,7 +421,7 @@ where [@TraitClause2]: core::slice::index::SliceIndex>, { type Output = @TraitClause2::Output - fn index = core::slice::index::{impl core::ops::index::Index for Slice}::index + fn index<'_0> = core::slice::index::{impl core::ops::index::Index for Slice}::index<'_0_0, T, I>[@TraitClause0, @TraitClause1, @TraitClause2] } fn test_crate::array_subslice_shared_<'_0>(@1: &'_0 (Array), @2: usize, @3: usize) -> &'_0 (Slice) @@ -456,7 +456,7 @@ fn test_crate::array_subslice_shared_<'_0>(@1: &'_0 (Array), @2 trait core::ops::index::IndexMut { parent_clause0 : [@TraitClause0]: core::ops::index::Index - fn index_mut : core::ops::index::IndexMut::index_mut + fn index_mut<'_0> = core::ops::index::IndexMut::index_mut<'_0_0, Self, Idx> } impl core::array::{impl core::ops::index::Index for Array}#15 : core::ops::index::Index, I> @@ -466,7 +466,7 @@ where [@TraitClause2]: core::ops::index::Index, I>, { type Output = @TraitClause2::Output - fn index = core::array::{impl core::ops::index::Index for Array}#15::index + fn index<'_0> = core::array::{impl core::ops::index::Index for Array}#15::index<'_0_0, T, I, const N : usize>[@TraitClause0, @TraitClause1, @TraitClause2] } fn core::array::{impl core::ops::index::IndexMut for Array}#16::index_mut<'_0, T, I, const N : usize>(@1: &'_0 mut (Array), @2: I) -> &'_0 mut (core::array::{impl core::ops::index::Index for Array}#15[@TraitClause0, @TraitClause1, @TraitClause2::parent_clause0]::Output) @@ -482,7 +482,7 @@ where [@TraitClause2]: core::slice::index::SliceIndex>, { parent_clause0 = core::slice::index::{impl core::ops::index::Index for Slice}[@TraitClause0, @TraitClause1, @TraitClause2] - fn index_mut = core::slice::index::{impl core::ops::index::IndexMut for Slice}#1::index_mut + fn index_mut<'_0> = core::slice::index::{impl core::ops::index::IndexMut for Slice}#1::index_mut<'_0_0, T, I>[@TraitClause0, @TraitClause1, @TraitClause2] } fn test_crate::array_subslice_mut_<'_0>(@1: &'_0 mut (Array), @2: usize, @3: usize) -> &'_0 mut (Slice) @@ -1885,7 +1885,7 @@ where [@TraitClause2]: core::ops::index::IndexMut, I>, { parent_clause0 = core::array::{impl core::ops::index::Index for Array}#15[@TraitClause0, @TraitClause1, @TraitClause2::parent_clause0] - fn index_mut = core::array::{impl core::ops::index::IndexMut for Array}#16::index_mut + fn index_mut<'_0> = core::array::{impl core::ops::index::IndexMut for Array}#16::index_mut<'_0_0, T, I, const N : usize>[@TraitClause0, @TraitClause1, @TraitClause2] } fn core::slice::index::SliceIndex::get<'_0, Self, T>(@1: Self, @2: &'_0 (T)) -> core::option::Option<&'_0 (Self::Output)>[core::marker::Sized<&'_0 (Self::Output)>] diff --git a/charon/tests/ui/associated-types.out b/charon/tests/ui/associated-types.out index 3b776f23..63faecf2 100644 --- a/charon/tests/ui/associated-types.out +++ b/charon/tests/ui/associated-types.out @@ -5,8 +5,8 @@ trait core::marker::Sized trait core::clone::Clone { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn clone : core::clone::Clone::clone - fn clone_from : core::clone::Clone::clone_from + fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self> + fn clone_from<'_0, '_1> = core::clone::Clone::clone_from<'_0_0, '_0_1, Self> } trait core::marker::Copy @@ -22,7 +22,7 @@ where parent_clause1 : [@TraitClause1]: core::clone::Clone parent_clause2 : [@TraitClause2]: core::marker::Sized type Item - fn use_item : test_crate::Foo::use_item + fn use_item<'_0> = test_crate::Foo::use_item<'a, '_0_0, Self> } fn core::clone::impls::{impl core::clone::Clone for &'_0 (T)}#3::clone<'_0, '_1, T>(@1: &'_1 (&'_0 (T))) -> &'_0 (T) @@ -30,7 +30,7 @@ fn core::clone::impls::{impl core::clone::Clone for &'_0 (T)}#3::clone<'_0, '_1, impl<'_0, T> core::clone::impls::{impl core::clone::Clone for &'_0 (T)}#3<'_0, T> : core::clone::Clone<&'_0 (T)> { parent_clause0 = core::marker::Sized<&'_ (T)> - fn clone = core::clone::impls::{impl core::clone::Clone for &'_0 (T)}#3::clone + fn clone<'_0> = core::clone::impls::{impl core::clone::Clone for &'_0 (T)}#3::clone<'_0, '_0_0, T> } impl<'_0, T> core::marker::{impl core::marker::Copy for &'_0 (T)}#4<'_0, T> : core::marker::Copy<&'_0 (T)> @@ -62,8 +62,8 @@ where [@TraitClause1]: core::clone::Clone, { parent_clause0 = core::marker::Sized[@TraitClause0]> - fn clone = core::option::{impl core::clone::Clone for core::option::Option[@TraitClause0]}#5::clone - fn clone_from = core::option::{impl core::clone::Clone for core::option::Option[@TraitClause0]}#5::clone_from + fn clone<'_0> = core::option::{impl core::clone::Clone for core::option::Option[@TraitClause0]}#5::clone<'_0_0, T>[@TraitClause0, @TraitClause1] + fn clone_from<'_0, '_1> = core::option::{impl core::clone::Clone for core::option::Option[@TraitClause0]}#5::clone_from<'_0_0, '_0_1, T>[@TraitClause0, @TraitClause1] } impl<'a, T> test_crate::{impl test_crate::Foo<'a> for &'a (T)}<'a, T> : test_crate::Foo<'a, &'a (T)> @@ -212,7 +212,7 @@ impl test_crate::loopy_with_generics::{impl test_crate::loopy_with_generics::Foo trait core::borrow::Borrow { - fn borrow : core::borrow::Borrow::borrow + fn borrow<'_0> = core::borrow::Borrow::borrow<'_0_0, Self, Borrowed> } trait alloc::borrow::ToOwned @@ -220,8 +220,8 @@ trait alloc::borrow::ToOwned parent_clause0 : [@TraitClause0]: core::borrow::Borrow parent_clause1 : [@TraitClause1]: core::marker::Sized type Owned - fn to_owned : alloc::borrow::ToOwned::to_owned - fn clone_into : alloc::borrow::ToOwned::clone_into + fn to_owned<'_0> = alloc::borrow::ToOwned::to_owned<'_0_0, Self> + fn clone_into<'_0, '_1> = alloc::borrow::ToOwned::clone_into<'_0_0, '_0_1, Self> } enum test_crate::cow::Cow<'a, B> diff --git a/charon/tests/ui/call-to-known-trait-method.out b/charon/tests/ui/call-to-known-trait-method.out index f6849e3e..b7d25321 100644 --- a/charon/tests/ui/call-to-known-trait-method.out +++ b/charon/tests/ui/call-to-known-trait-method.out @@ -13,7 +13,7 @@ struct test_crate::Struct trait core::default::Default { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn default : core::default::Default::default + fn default = core::default::Default::default } fn core::default::Default::default() -> Self @@ -39,7 +39,7 @@ where [@TraitClause1]: core::default::Default, { parent_clause0 = core::marker::Sized[@TraitClause0]> - fn default = test_crate::{impl core::default::Default for test_crate::Struct[@TraitClause0]}#1::default + fn default = test_crate::{impl core::default::Default for test_crate::Struct[@TraitClause0]}#1::default[@TraitClause0, @TraitClause1] } trait test_crate::Trait @@ -47,20 +47,20 @@ trait test_crate::Trait parent_clause0 : [@TraitClause0]: core::marker::Sized parent_clause1 : [@TraitClause1]: core::marker::Sized type Item - fn method : test_crate::Trait::method + fn method> = test_crate::Trait::method[@TraitClause0_0] } trait core::clone::Clone { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn clone : core::clone::Clone::clone - fn clone_from : core::clone::Clone::clone_from + fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self> + fn clone_from<'_0, '_1> = core::clone::Clone::clone_from<'_0_0, '_0_1, Self> } trait core::cmp::PartialEq { - fn eq : core::cmp::PartialEq::eq - fn ne : core::cmp::PartialEq::ne + fn eq<'_0, '_1> = core::cmp::PartialEq::eq<'_0_0, '_0_1, Self, Rhs> + fn ne<'_0, '_1> = core::cmp::PartialEq::ne<'_0_0, '_0_1, Self, Rhs> } fn test_crate::{impl test_crate::Trait for test_crate::Struct[@TraitClause0]}::method() @@ -90,7 +90,7 @@ where parent_clause0 = @TraitClause1 parent_clause1 = core::marker::Sized<(A, B)> type Item = (A, B) - fn method = test_crate::{impl test_crate::Trait for test_crate::Struct[@TraitClause0]}::method + fn method> = test_crate::{impl test_crate::Trait for test_crate::Struct[@TraitClause0]}::method[@TraitClause0, @TraitClause1, @TraitClause2, @TraitClause3, @TraitClause0_0] } fn core::default::{impl core::default::Default for bool}#1::default() -> bool @@ -108,7 +108,7 @@ fn core::clone::impls::{impl core::clone::Clone for u8}#6::clone<'_0>(@1: &'_0 ( impl core::clone::impls::{impl core::clone::Clone for u8}#6 : core::clone::Clone { parent_clause0 = core::marker::Sized - fn clone = core::clone::impls::{impl core::clone::Clone for u8}#6::clone + fn clone<'_0> = core::clone::impls::{impl core::clone::Clone for u8}#6::clone<'_0_0> } fn core::cmp::impls::{impl core::cmp::PartialEq for bool}#19::eq<'_0, '_1>(@1: &'_0 (bool), @2: &'_1 (bool)) -> bool @@ -117,8 +117,8 @@ fn core::cmp::impls::{impl core::cmp::PartialEq for bool}#19::ne<'_0, '_1> impl core::cmp::impls::{impl core::cmp::PartialEq for bool}#19 : core::cmp::PartialEq { - fn eq = core::cmp::impls::{impl core::cmp::PartialEq for bool}#19::eq - fn ne = core::cmp::impls::{impl core::cmp::PartialEq for bool}#19::ne + fn eq<'_0, '_1> = core::cmp::impls::{impl core::cmp::PartialEq for bool}#19::eq<'_0_0, '_0_1> + fn ne<'_0, '_1> = core::cmp::impls::{impl core::cmp::PartialEq for bool}#19::ne<'_0_0, '_0_1> } fn test_crate::main() diff --git a/charon/tests/ui/closures.out b/charon/tests/ui/closures.out index dfec299a..ccd5b1d7 100644 --- a/charon/tests/ui/closures.out +++ b/charon/tests/ui/closures.out @@ -22,7 +22,7 @@ trait core::ops::function::FnOnce parent_clause1 : [@TraitClause1]: core::marker::Tuple parent_clause2 : [@TraitClause2]: core::marker::Sized type Output - fn call_once : core::ops::function::FnOnce::call_once + fn call_once = core::ops::function::FnOnce::call_once } trait core::ops::function::FnMut @@ -30,7 +30,7 @@ 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 : core::ops::function::FnMut::call_mut + fn call_mut<'_0> = core::ops::function::FnMut::call_mut<'_0_0, Self, Args> } trait core::ops::function::Fn @@ -38,7 +38,7 @@ trait core::ops::function::Fn parent_clause0 : [@TraitClause0]: core::ops::function::FnMut parent_clause1 : [@TraitClause1]: core::marker::Sized parent_clause2 : [@TraitClause2]: core::marker::Tuple - fn call : core::ops::function::Fn::call + fn call<'_0> = core::ops::function::Fn::call<'_0_0, Self, Args> } enum core::option::Option @@ -413,8 +413,8 @@ fn test_crate::test_map_option_id2(@1: core::option::Option[core::marker::S trait core::clone::Clone { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn clone : core::clone::Clone::clone - fn clone_from : core::clone::Clone::clone_from + fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self> + fn clone_from<'_0, '_1> = core::clone::Clone::clone_from<'_0_0, '_0_1, Self> } fn core::clone::Clone::clone<'_0, Self>(@1: &'_0 (Self)) -> Self @@ -440,7 +440,7 @@ fn core::clone::impls::{impl core::clone::Clone for u32}#8::clone<'_0>(@1: &'_0 impl core::clone::impls::{impl core::clone::Clone for u32}#8 : core::clone::Clone { parent_clause0 = core::marker::Sized - fn clone = core::clone::impls::{impl core::clone::Clone for u32}#8::clone + fn clone<'_0> = core::clone::impls::{impl core::clone::Clone for u32}#8::clone<'_0_0> } fn test_crate::test_id_clone(@1: u32) -> u32 diff --git a/charon/tests/ui/comments.out b/charon/tests/ui/comments.out index 6ece9901..3800e05d 100644 --- a/charon/tests/ui/comments.out +++ b/charon/tests/ui/comments.out @@ -141,7 +141,7 @@ struct test_crate::Foo = trait core::default::Default { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn default : core::default::Default::default + fn default = core::default::Default::default } fn core::default::{impl core::default::Default for u32}#7::default() -> u32 diff --git a/charon/tests/ui/demo.out b/charon/tests/ui/demo.out index eef5d6ae..009d5694 100644 --- a/charon/tests/ui/demo.out +++ b/charon/tests/ui/demo.out @@ -381,7 +381,7 @@ where trait test_crate::Counter { - fn incr : test_crate::Counter::incr + fn incr<'_0> = test_crate::Counter::incr<'_0_0, Self> } fn test_crate::{impl test_crate::Counter for usize}::incr<'_0>(@1: &'_0 mut (usize)) -> usize @@ -400,7 +400,7 @@ fn test_crate::{impl test_crate::Counter for usize}::incr<'_0>(@1: &'_0 mut (usi impl test_crate::{impl test_crate::Counter for usize} : test_crate::Counter { - fn incr = test_crate::{impl test_crate::Counter for usize}::incr + fn incr<'_0> = test_crate::{impl test_crate::Counter for usize}::incr<'_0_0> } fn test_crate::Counter::incr<'_0, Self>(@1: &'_0 mut (Self)) -> usize diff --git a/charon/tests/ui/dictionary_passing_style_woes.out b/charon/tests/ui/dictionary_passing_style_woes.out index ec9fd752..5306e203 100644 --- a/charon/tests/ui/dictionary_passing_style_woes.out +++ b/charon/tests/ui/dictionary_passing_style_woes.out @@ -65,7 +65,7 @@ trait test_crate::X { parent_clause0 : [@TraitClause0]: core::marker::Sized type Assoc - fn method : test_crate::X::method + fn method<'_0> = test_crate::X::method<'_0_0, Self> } trait test_crate::A diff --git a/charon/tests/ui/dyn-trait.out b/charon/tests/ui/dyn-trait.out index a2630b2f..45dde09f 100644 --- a/charon/tests/ui/dyn-trait.out +++ b/charon/tests/ui/dyn-trait.out @@ -19,7 +19,7 @@ struct core::fmt::Error = {} trait core::fmt::Display { - fn fmt : core::fmt::Display::fmt + fn fmt<'_0, '_1, '_2> = core::fmt::Display::fmt<'_0_0, '_0_1, '_0_2, Self> } struct alloc::alloc::Global = {} @@ -80,14 +80,14 @@ fn alloc::string::ToString::to_string<'_0, Self>(@1: &'_0 (Self)) -> alloc::stri trait alloc::string::ToString { - fn to_string : alloc::string::ToString::to_string + fn to_string<'_0> = alloc::string::ToString::to_string<'_0_0, Self> } impl alloc::string::{impl alloc::string::ToString for T}#32 : alloc::string::ToString where [@TraitClause0]: core::fmt::Display, { - fn to_string = alloc::string::{impl alloc::string::ToString for T}#32::to_string + fn to_string<'_0> = alloc::string::{impl alloc::string::ToString for T}#32::to_string<'_0_0, T>[@TraitClause0] } fn core::fmt::Display::fmt<'_0, '_1, '_2, Self>(@1: &'_0 (Self), @2: &'_1 mut (core::fmt::Formatter<'_2>)) -> core::result::Result<(), core::fmt::Error>[core::marker::Sized<()>, core::marker::Sized] diff --git a/charon/tests/ui/external.out b/charon/tests/ui/external.out index 250b433d..b3dda386 100644 --- a/charon/tests/ui/external.out +++ b/charon/tests/ui/external.out @@ -28,8 +28,8 @@ where trait core::clone::Clone { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn clone : core::clone::Clone::clone - fn clone_from : core::clone::Clone::clone_from + fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self> + fn clone_from<'_0, '_1> = core::clone::Clone::clone_from<'_0_0, '_0_1, Self> } trait core::marker::Copy @@ -60,7 +60,7 @@ fn core::clone::impls::{impl core::clone::Clone for u32}#8::clone<'_0>(@1: &'_0 impl core::clone::impls::{impl core::clone::Clone for u32}#8 : core::clone::Clone { parent_clause0 = core::marker::Sized - fn clone = core::clone::impls::{impl core::clone::Clone for u32}#8::clone + fn clone<'_0> = core::clone::impls::{impl core::clone::Clone for u32}#8::clone<'_0_0> } impl core::marker::{impl core::marker::Copy for u32}#40 : core::marker::Copy @@ -77,7 +77,7 @@ fn core::num::nonzero::private::{impl core::clone::Clone for core::num::nonzero: impl core::num::nonzero::private::{impl core::clone::Clone for core::num::nonzero::private::NonZeroU32Inner}#11 : core::clone::Clone { parent_clause0 = core::marker::Sized - fn clone = core::num::nonzero::private::{impl core::clone::Clone for core::num::nonzero::private::NonZeroU32Inner}#11::clone + fn clone<'_0> = core::num::nonzero::private::{impl core::clone::Clone for core::num::nonzero::private::NonZeroU32Inner}#11::clone<'_0_0> } impl core::num::nonzero::private::{impl core::marker::Copy for core::num::nonzero::private::NonZeroU32Inner}#12 : core::marker::Copy diff --git a/charon/tests/ui/impl-trait.out b/charon/tests/ui/impl-trait.out index f9e4d084..5222d9b7 100644 --- a/charon/tests/ui/impl-trait.out +++ b/charon/tests/ui/impl-trait.out @@ -5,8 +5,8 @@ trait core::marker::Sized trait core::clone::Clone { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn clone : core::clone::Clone::clone - fn clone_from : core::clone::Clone::clone_from + fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self> + fn clone_from<'_0, '_1> = core::clone::Clone::clone_from<'_0_0, '_0_1, Self> } trait test_crate::Foo @@ -14,7 +14,7 @@ trait test_crate::Foo parent_clause0 : [@TraitClause0]: core::clone::Clone parent_clause1 : [@TraitClause1]: core::marker::Sized type Type - fn get_ty : test_crate::Foo::get_ty + fn get_ty<'_0> = test_crate::Foo::get_ty<'_0_0, Self> } fn core::clone::impls::{impl core::clone::Clone for u32}#8::clone<'_0>(@1: &'_0 (u32)) -> u32 @@ -22,7 +22,7 @@ fn core::clone::impls::{impl core::clone::Clone for u32}#8::clone<'_0>(@1: &'_0 impl core::clone::impls::{impl core::clone::Clone for u32}#8 : core::clone::Clone { parent_clause0 = core::marker::Sized - fn clone = core::clone::impls::{impl core::clone::Clone for u32}#8::clone + fn clone<'_0> = core::clone::impls::{impl core::clone::Clone for u32}#8::clone<'_0_0> } fn test_crate::{impl test_crate::Foo for ()}::get_ty<'_0>(@1: &'_0 (())) -> &'_0 (u32) @@ -45,7 +45,7 @@ impl test_crate::{impl test_crate::Foo for ()} : test_crate::Foo<()> parent_clause0 = core::clone::impls::{impl core::clone::Clone for u32}#8 parent_clause1 = core::marker::Sized type Type = u32 - fn get_ty = test_crate::{impl test_crate::Foo for ()}::get_ty + fn get_ty<'_0> = test_crate::{impl test_crate::Foo for ()}::get_ty<'_0_0> } fn test_crate::mk_foo() @@ -92,7 +92,7 @@ trait test_crate::RPITIT parent_clause0 : [@TraitClause0]: test_crate::Foo parent_clause1 : [@TraitClause1]: core::marker::Sized type - fn make_foo : test_crate::RPITIT::make_foo + fn make_foo = test_crate::RPITIT::make_foo } fn test_crate::{impl test_crate::RPITIT for ()}#1::make_foo() @@ -173,7 +173,7 @@ fn core::clone::impls::{impl core::clone::Clone for &'_0 (T)}#3::clone<'_0, '_1, impl<'_0, T> core::clone::impls::{impl core::clone::Clone for &'_0 (T)}#3<'_0, T> : core::clone::Clone<&'_0 (T)> { parent_clause0 = core::marker::Sized<&'_ (T)> - fn clone = core::clone::impls::{impl core::clone::Clone for &'_0 (T)}#3::clone + fn clone<'_0> = core::clone::impls::{impl core::clone::Clone for &'_0 (T)}#3::clone<'_0, '_0_0, T> } fn test_crate::wrap::closure<'_0, U>(@1: (), @2: &'_0 (U)) -> test_crate::WrapClone<&'_0 (U)>[core::marker::Sized<&'_0 (U)>, core::clone::impls::{impl core::clone::Clone for &'_0 (T)}#3<'_, U>] @@ -209,7 +209,7 @@ trait core::ops::function::FnOnce parent_clause1 : [@TraitClause1]: core::marker::Tuple parent_clause2 : [@TraitClause2]: core::marker::Sized type Output - fn call_once : core::ops::function::FnOnce::call_once + fn call_once = core::ops::function::FnOnce::call_once } fn core::ops::function::FnOnce::call_once(@1: Self, @2: Args) -> Self::Output diff --git a/charon/tests/ui/issue-114-opaque-bodies.out b/charon/tests/ui/issue-114-opaque-bodies.out index f2539f99..1b29c913 100644 --- a/charon/tests/ui/issue-114-opaque-bodies.out +++ b/charon/tests/ui/issue-114-opaque-bodies.out @@ -207,8 +207,8 @@ fn test_crate::max() -> usize trait core::cmp::PartialEq { - fn eq : core::cmp::PartialEq::eq - fn ne : core::cmp::PartialEq::ne + fn eq<'_0, '_1> = core::cmp::PartialEq::eq<'_0_0, '_0_1, Self, Rhs> + fn ne<'_0, '_1> = core::cmp::PartialEq::ne<'_0_0, '_0_1, Self, Rhs> } fn test_crate::partial_eq(@1: T) @@ -233,7 +233,7 @@ trait core::convert::From { parent_clause0 : [@TraitClause0]: core::marker::Sized parent_clause1 : [@TraitClause1]: core::marker::Sized - fn from : core::convert::From::from + fn from = core::convert::From::from } impl core::convert::num::{impl core::convert::From for i64}#83 : core::convert::From diff --git a/charon/tests/ui/issue-118-generic-copy.out b/charon/tests/ui/issue-118-generic-copy.out index af71004f..f73124d2 100644 --- a/charon/tests/ui/issue-118-generic-copy.out +++ b/charon/tests/ui/issue-118-generic-copy.out @@ -7,8 +7,8 @@ trait core::marker::Sized trait core::clone::Clone { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn clone : core::clone::Clone::clone - fn clone_from : core::clone::Clone::clone_from + fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self> + fn clone_from<'_0, '_1> = core::clone::Clone::clone_from<'_0_0, '_0_1, Self> } fn test_crate::{impl core::clone::Clone for test_crate::Foo}::clone<'_0>(@1: &'_0 (test_crate::Foo)) -> test_crate::Foo @@ -23,7 +23,7 @@ fn test_crate::{impl core::clone::Clone for test_crate::Foo}::clone<'_0>(@1: &'_ impl test_crate::{impl core::clone::Clone for test_crate::Foo} : core::clone::Clone { parent_clause0 = core::marker::Sized - fn clone = test_crate::{impl core::clone::Clone for test_crate::Foo}::clone + fn clone<'_0> = test_crate::{impl core::clone::Clone for test_crate::Foo}::clone<'_0_0> } trait core::marker::Copy diff --git a/charon/tests/ui/issue-159-heterogeneous-recursive-definitions.out b/charon/tests/ui/issue-159-heterogeneous-recursive-definitions.out index 3dfc130f..b1ff4d7b 100644 --- a/charon/tests/ui/issue-159-heterogeneous-recursive-definitions.out +++ b/charon/tests/ui/issue-159-heterogeneous-recursive-definitions.out @@ -2,8 +2,8 @@ trait test_crate::Ops { - fn ZERO : test_crate::Ops::ZERO - fn ntt_multiply : test_crate::Ops::ntt_multiply + fn ZERO = test_crate::Ops::ZERO + fn ntt_multiply = test_crate::Ops::ntt_multiply } struct test_crate::Portable = {} diff --git a/charon/tests/ui/issue-165-vec-macro.out b/charon/tests/ui/issue-165-vec-macro.out index 1582aaa9..fef93285 100644 --- a/charon/tests/ui/issue-165-vec-macro.out +++ b/charon/tests/ui/issue-165-vec-macro.out @@ -17,8 +17,8 @@ where trait core::clone::Clone { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn clone : core::clone::Clone::clone - fn clone_from : core::clone::Clone::clone_from + fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self> + fn clone_from<'_0, '_1> = core::clone::Clone::clone_from<'_0_0, '_0_1, Self> } fn alloc::vec::from_elem(@1: T, @2: usize) -> alloc::vec::Vec[@TraitClause0, core::marker::Sized] @@ -31,7 +31,7 @@ fn core::clone::impls::{impl core::clone::Clone for i32}#14::clone<'_0>(@1: &'_0 impl core::clone::impls::{impl core::clone::Clone for i32}#14 : core::clone::Clone { parent_clause0 = core::marker::Sized - fn clone = core::clone::impls::{impl core::clone::Clone for i32}#14::clone + fn clone<'_0> = core::clone::impls::{impl core::clone::Clone for i32}#14::clone<'_0_0> } fn test_crate::foo() diff --git a/charon/tests/ui/issue-372-type-param-out-of-range.out b/charon/tests/ui/issue-372-type-param-out-of-range.out index b117eda9..f846387f 100644 --- a/charon/tests/ui/issue-372-type-param-out-of-range.out +++ b/charon/tests/ui/issue-372-type-param-out-of-range.out @@ -19,7 +19,7 @@ trait core::ops::function::FnOnce parent_clause1 : [@TraitClause1]: core::marker::Tuple parent_clause2 : [@TraitClause2]: core::marker::Sized type Output - fn call_once : core::ops::function::FnOnce::call_once + fn call_once = core::ops::function::FnOnce::call_once } trait core::ops::function::FnMut @@ -27,7 +27,7 @@ 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 : core::ops::function::FnMut::call_mut + fn call_mut<'_0> = core::ops::function::FnMut::call_mut<'_0_0, Self, Args> } fn test_crate::{test_crate::S<'a, K>[@TraitClause0]}::f<'a, K, F>() diff --git a/charon/tests/ui/issue-394-rpit-with-lifetime.out b/charon/tests/ui/issue-394-rpit-with-lifetime.out index 61c1da12..faacf2df 100644 --- a/charon/tests/ui/issue-394-rpit-with-lifetime.out +++ b/charon/tests/ui/issue-394-rpit-with-lifetime.out @@ -31,7 +31,7 @@ trait core::ops::function::FnOnce parent_clause1 : [@TraitClause1]: core::marker::Tuple parent_clause2 : [@TraitClause2]: core::marker::Sized type Output - fn call_once : core::ops::function::FnOnce::call_once + fn call_once = core::ops::function::FnOnce::call_once } trait core::ops::function::FnMut @@ -39,7 +39,7 @@ 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 : core::ops::function::FnMut::call_mut + fn call_mut<'_0> = core::ops::function::FnMut::call_mut<'_0_0, Self, Args> } fn core::iter::sources::from_fn::from_fn(@1: F) -> core::iter::sources::from_fn::FromFn[@TraitClause1] diff --git a/charon/tests/ui/issue-395-failed-to-normalize.out b/charon/tests/ui/issue-395-failed-to-normalize.out index 160f1c05..d280950e 100644 --- a/charon/tests/ui/issue-395-failed-to-normalize.out +++ b/charon/tests/ui/issue-395-failed-to-normalize.out @@ -41,8 +41,8 @@ opaque type core::array::iter::IntoIter trait core::clone::Clone { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn clone : core::clone::Clone::clone - fn clone_from : core::clone::Clone::clone_from + fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self> + fn clone_from<'_0, '_1> = core::clone::Clone::clone_from<'_0_0, '_0_1, Self> } trait core::marker::Copy @@ -73,7 +73,7 @@ fn core::clone::impls::{impl core::clone::Clone for usize}#5::clone<'_0>(@1: &'_ impl core::clone::impls::{impl core::clone::Clone for usize}#5 : core::clone::Clone { parent_clause0 = core::marker::Sized - fn clone = core::clone::impls::{impl core::clone::Clone for usize}#5::clone + 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 @@ -90,7 +90,7 @@ fn core::num::nonzero::private::{impl core::clone::Clone for core::num::nonzero: 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 = core::num::nonzero::private::{impl core::clone::Clone for core::num::nonzero::private::NonZeroUsizeInner}#26::clone + 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 @@ -131,7 +131,7 @@ trait core::ops::function::FnOnce parent_clause1 : [@TraitClause1]: core::marker::Tuple parent_clause2 : [@TraitClause2]: core::marker::Sized type Output - fn call_once : core::ops::function::FnOnce::call_once + fn call_once = core::ops::function::FnOnce::call_once } trait core::ops::function::FnMut @@ -139,7 +139,7 @@ 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 : core::ops::function::FnMut::call_mut + fn call_mut<'_0> = core::ops::function::FnMut::call_mut<'_0_0, Self, Args> } opaque type core::iter::adapters::map::Map @@ -202,7 +202,7 @@ opaque type core::iter::adapters::inspect::Inspect trait core::ops::try_trait::FromResidual { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn from_residual : core::ops::try_trait::FromResidual::from_residual + fn from_residual = core::ops::try_trait::FromResidual::from_residual } enum core::ops::control_flow::ControlFlow @@ -221,8 +221,8 @@ trait core::ops::try_trait::Try parent_clause2 : [@TraitClause2]: core::marker::Sized type Output type Residual - fn from_output : core::ops::try_trait::Try::from_output - fn branch : core::ops::try_trait::Try::branch + fn from_output = core::ops::try_trait::Try::from_output + fn branch = core::ops::try_trait::Try::branch } trait core::ops::try_trait::Residual @@ -240,19 +240,19 @@ where trait core::default::Default { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn default : core::default::Default::default + fn default = core::default::Default::default } trait core::cmp::PartialEq { - fn eq : core::cmp::PartialEq::eq - fn ne : core::cmp::PartialEq::ne + fn eq<'_0, '_1> = core::cmp::PartialEq::eq<'_0_0, '_0_1, Self, Rhs> + fn ne<'_0, '_1> = core::cmp::PartialEq::ne<'_0_0, '_0_1, Self, Rhs> } trait core::cmp::Eq { parent_clause0 : [@TraitClause0]: core::cmp::PartialEq - fn assert_receiver_is_total_eq : core::cmp::Eq::assert_receiver_is_total_eq + fn assert_receiver_is_total_eq<'_0> = core::cmp::Eq::assert_receiver_is_total_eq<'_0_0, Self> } enum core::cmp::Ordering = @@ -264,21 +264,21 @@ enum core::cmp::Ordering = trait core::cmp::PartialOrd { parent_clause0 : [@TraitClause0]: core::cmp::PartialEq - fn partial_cmp : core::cmp::PartialOrd::partial_cmp - fn lt : core::cmp::PartialOrd::lt - fn le : core::cmp::PartialOrd::le - fn gt : core::cmp::PartialOrd::gt - fn ge : core::cmp::PartialOrd::ge + fn partial_cmp<'_0, '_1> = core::cmp::PartialOrd::partial_cmp<'_0_0, '_0_1, Self, Rhs> + fn lt<'_0, '_1> = core::cmp::PartialOrd::lt<'_0_0, '_0_1, Self, Rhs> + fn le<'_0, '_1> = core::cmp::PartialOrd::le<'_0_0, '_0_1, Self, Rhs> + fn gt<'_0, '_1> = core::cmp::PartialOrd::gt<'_0_0, '_0_1, Self, Rhs> + fn ge<'_0, '_1> = core::cmp::PartialOrd::ge<'_0_0, '_0_1, Self, Rhs> } trait core::cmp::Ord { parent_clause0 : [@TraitClause0]: core::cmp::Eq parent_clause1 : [@TraitClause1]: core::cmp::PartialOrd - fn cmp : core::cmp::Ord::cmp - fn max : core::cmp::Ord::max - fn min : core::cmp::Ord::min - fn clamp : core::cmp::Ord::clamp + fn cmp<'_0, '_1> = core::cmp::Ord::cmp<'_0_0, '_0_1, Self> + fn max<[@TraitClause0]: core::marker::Sized> = core::cmp::Ord::max[@TraitClause0_0] + fn min<[@TraitClause0]: core::marker::Sized> = core::cmp::Ord::min[@TraitClause0_0] + fn clamp<[@TraitClause0]: core::marker::Sized> = core::cmp::Ord::clamp[@TraitClause0_0] } opaque type core::iter::adapters::rev::Rev @@ -301,83 +301,83 @@ trait core::iter::traits::iterator::Iterator { parent_clause0 : [@TraitClause0]: core::marker::Sized type Item - fn next : core::iter::traits::iterator::Iterator::next - fn next_chunk : core::iter::traits::iterator::Iterator::next_chunk - fn size_hint : core::iter::traits::iterator::Iterator::size_hint - fn count : core::iter::traits::iterator::Iterator::count - fn last : core::iter::traits::iterator::Iterator::last - fn advance_by : core::iter::traits::iterator::Iterator::advance_by - fn nth : core::iter::traits::iterator::Iterator::nth - fn step_by : core::iter::traits::iterator::Iterator::step_by - fn chain : core::iter::traits::iterator::Iterator::chain - fn zip : core::iter::traits::iterator::Iterator::zip - fn intersperse : core::iter::traits::iterator::Iterator::intersperse - fn intersperse_with : core::iter::traits::iterator::Iterator::intersperse_with - fn map : core::iter::traits::iterator::Iterator::map - fn for_each : core::iter::traits::iterator::Iterator::for_each - fn filter : core::iter::traits::iterator::Iterator::filter - fn filter_map : core::iter::traits::iterator::Iterator::filter_map - fn enumerate : core::iter::traits::iterator::Iterator::enumerate - fn peekable : core::iter::traits::iterator::Iterator::peekable - fn skip_while : core::iter::traits::iterator::Iterator::skip_while - fn take_while : core::iter::traits::iterator::Iterator::take_while - fn map_while : core::iter::traits::iterator::Iterator::map_while - fn skip : core::iter::traits::iterator::Iterator::skip - fn take : core::iter::traits::iterator::Iterator::take - fn scan : core::iter::traits::iterator::Iterator::scan - fn flat_map : core::iter::traits::iterator::Iterator::flat_map - fn flatten : core::iter::traits::iterator::Iterator::flatten - fn map_windows : core::iter::traits::iterator::Iterator::map_windows - fn fuse : core::iter::traits::iterator::Iterator::fuse - fn inspect : core::iter::traits::iterator::Iterator::inspect - fn by_ref : core::iter::traits::iterator::Iterator::by_ref - fn collect : core::iter::traits::iterator::Iterator::collect - fn try_collect : core::iter::traits::iterator::Iterator::try_collect - fn collect_into : core::iter::traits::iterator::Iterator::collect_into - fn partition : core::iter::traits::iterator::Iterator::partition - fn partition_in_place : core::iter::traits::iterator::Iterator::partition_in_place - fn is_partitioned : core::iter::traits::iterator::Iterator::is_partitioned - fn try_fold : core::iter::traits::iterator::Iterator::try_fold - fn try_for_each : core::iter::traits::iterator::Iterator::try_for_each - fn fold : core::iter::traits::iterator::Iterator::fold - fn reduce : core::iter::traits::iterator::Iterator::reduce - fn try_reduce : core::iter::traits::iterator::Iterator::try_reduce - fn all : core::iter::traits::iterator::Iterator::all - fn any : core::iter::traits::iterator::Iterator::any - fn find : core::iter::traits::iterator::Iterator::find - fn find_map : core::iter::traits::iterator::Iterator::find_map - fn try_find : core::iter::traits::iterator::Iterator::try_find - fn position : core::iter::traits::iterator::Iterator::position - fn rposition : core::iter::traits::iterator::Iterator::rposition - fn max : core::iter::traits::iterator::Iterator::max - fn min : core::iter::traits::iterator::Iterator::min - fn max_by_key : core::iter::traits::iterator::Iterator::max_by_key - fn max_by : core::iter::traits::iterator::Iterator::max_by - fn min_by_key : core::iter::traits::iterator::Iterator::min_by_key - fn min_by : core::iter::traits::iterator::Iterator::min_by - fn rev : core::iter::traits::iterator::Iterator::rev - fn unzip : core::iter::traits::iterator::Iterator::unzip - fn copied : core::iter::traits::iterator::Iterator::copied - fn cloned : core::iter::traits::iterator::Iterator::cloned - fn cycle : core::iter::traits::iterator::Iterator::cycle - fn array_chunks : core::iter::traits::iterator::Iterator::array_chunks - fn sum : core::iter::traits::iterator::Iterator::sum - fn product : core::iter::traits::iterator::Iterator::product - fn cmp : core::iter::traits::iterator::Iterator::cmp - fn cmp_by : core::iter::traits::iterator::Iterator::cmp_by - fn partial_cmp : core::iter::traits::iterator::Iterator::partial_cmp - fn partial_cmp_by : core::iter::traits::iterator::Iterator::partial_cmp_by - fn eq : core::iter::traits::iterator::Iterator::eq - fn eq_by : core::iter::traits::iterator::Iterator::eq_by - fn ne : core::iter::traits::iterator::Iterator::ne - fn lt : core::iter::traits::iterator::Iterator::lt - fn le : core::iter::traits::iterator::Iterator::le - fn gt : core::iter::traits::iterator::Iterator::gt - fn ge : core::iter::traits::iterator::Iterator::ge - fn is_sorted : core::iter::traits::iterator::Iterator::is_sorted - fn is_sorted_by : core::iter::traits::iterator::Iterator::is_sorted_by - fn is_sorted_by_key : core::iter::traits::iterator::Iterator::is_sorted_by_key - fn __iterator_get_unchecked : core::iter::traits::iterator::Iterator::__iterator_get_unchecked + fn next<'_0> = core::iter::traits::iterator::Iterator::next<'_0_0, 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>[@TraitClause0_0] + fn size_hint<'_0> = core::iter::traits::iterator::Iterator::size_hint<'_0_0, Self> + fn count<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::count[@TraitClause0_0] + fn last<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::last[@TraitClause0_0] + fn advance_by<'_0> = core::iter::traits::iterator::Iterator::advance_by<'_0_0, Self> + fn nth<'_0> = core::iter::traits::iterator::Iterator::nth<'_0_0, Self> + fn step_by<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::step_by[@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[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn zip, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::iter::traits::collect::IntoIterator> = core::iter::traits::iterator::Iterator::zip[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn intersperse<[@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::clone::Clone> = core::iter::traits::iterator::Iterator::intersperse[@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[@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[@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[@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[@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[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn enumerate<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::enumerate[@TraitClause0_0] + fn peekable<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::peekable[@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[@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[@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[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn skip<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::skip[@TraitClause0_0] + fn take<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::take[@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[@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[@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[@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[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn fuse<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::fuse[@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[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn by_ref<'_0, [@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::by_ref<'_0_0, Self>[@TraitClause0_0] + fn collect, [@TraitClause1]: core::iter::traits::collect::FromIterator, [@TraitClause2]: core::marker::Sized> = core::iter::traits::iterator::Iterator::collect[@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>[@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>[@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[@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>[@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[@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>[@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>[@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[@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[@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>[@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>[@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>[@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>[@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>[@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>[@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>[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn rposition<'_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>[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2] } trait core::iter::traits::exact_size::ExactSizeIterator { parent_clause0 : [@TraitClause0]: core::iter::traits::iterator::Iterator - fn len : core::iter::traits::exact_size::ExactSizeIterator::len - fn is_empty : core::iter::traits::exact_size::ExactSizeIterator::is_empty + fn len<'_0> = core::iter::traits::exact_size::ExactSizeIterator::len<'_0_0, Self> + fn is_empty<'_0> = core::iter::traits::exact_size::ExactSizeIterator::is_empty<'_0_0, Self> } opaque type core::iter::adapters::array_chunks::ArrayChunks @@ -471,21 +471,21 @@ trait core::iter::traits::accum::Sum { parent_clause0 : [@TraitClause0]: core::marker::Sized parent_clause1 : [@TraitClause1]: core::marker::Sized - fn sum : core::iter::traits::accum::Sum::sum + fn sum, [@TraitClause1]: core::iter::traits::iterator::Iterator, @TraitClause1_1::Item = A> = core::iter::traits::accum::Sum::sum[@TraitClause0_0, @TraitClause0_1] } trait core::iter::traits::accum::Product { parent_clause0 : [@TraitClause0]: core::marker::Sized parent_clause1 : [@TraitClause1]: core::marker::Sized - fn product : core::iter::traits::accum::Product::product + fn product, [@TraitClause1]: core::iter::traits::iterator::Iterator, @TraitClause1_1::Item = A> = core::iter::traits::accum::Product::product[@TraitClause0_0, @TraitClause0_1] } trait core::iter::adapters::zip::TrustedRandomAccessNoCoerce { parent_clause0 : [@TraitClause0]: core::marker::Sized const MAY_HAVE_SIDE_EFFECT : bool - fn size : core::iter::adapters::zip::TrustedRandomAccessNoCoerce::size + fn size<'_0, [@TraitClause0]: core::iter::traits::iterator::Iterator> = core::iter::adapters::zip::TrustedRandomAccessNoCoerce::size<'_0_0, Self>[@TraitClause0_0] } struct test_crate::S @@ -1028,23 +1028,71 @@ fn core::clone::Clone::clone<'_0, Self>(@1: &'_0 (Self)) -> Self fn core::clone::Clone::clone_from<'_0, '_1, Self>(@1: &'_0 mut (Self), @2: &'_1 (Self)) -fn core::iter::traits::collect::IntoIterator::into_iter(@1: Self) -> Self::IntoIter +fn core::cmp::PartialEq::eq<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool + +fn core::cmp::PartialEq::ne<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool + +fn core::cmp::Ord::cmp<'_0, '_1, Self>(@1: &'_0 (Self), @2: &'_1 (Self)) -> core::cmp::Ordering + +fn core::cmp::Ord::max(@1: Self, @2: Self) -> Self +where + [@TraitClause0]: core::marker::Sized, + +fn core::cmp::Ord::min(@1: Self, @2: Self) -> Self +where + [@TraitClause0]: core::marker::Sized, + +fn core::cmp::Ord::clamp(@1: Self, @2: Self, @3: Self) -> Self +where + [@TraitClause0]: core::marker::Sized, + +fn core::cmp::Eq::assert_receiver_is_total_eq<'_0, Self>(@1: &'_0 (Self)) + +fn core::cmp::PartialOrd::partial_cmp<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> core::option::Option[core::marker::Sized] + +fn core::cmp::PartialOrd::lt<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool + +fn core::cmp::PartialOrd::le<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool + +fn core::cmp::PartialOrd::gt<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool + +fn core::cmp::PartialOrd::ge<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool + +fn core::default::Default::default() -> Self fn core::ops::function::FnMut::call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> Self::parent_clause0::Output fn core::ops::function::FnOnce::call_once(@1: Self, @2: Args) -> Self::Output +fn core::ops::try_trait::Try::from_output(@1: Self::Output) -> Self + +fn core::ops::try_trait::Try::branch(@1: Self) -> core::ops::control_flow::ControlFlow[Self::parent_clause0::parent_clause0, Self::parent_clause1] + +fn core::ops::try_trait::FromResidual::from_residual(@1: R) -> Self + +fn core::iter::adapters::zip::TrustedRandomAccessNoCoerce::size<'_0, Self>(@1: &'_0 (Self)) -> usize +where + [@TraitClause0]: core::iter::traits::iterator::Iterator, + +fn core::iter::traits::accum::Sum::sum(@1: I) -> Self +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::iter::traits::iterator::Iterator, + @TraitClause1::Item = A, + +fn core::iter::traits::accum::Product::product(@1: I) -> Self +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::iter::traits::iterator::Iterator, + @TraitClause1::Item = A, + fn core::iter::traits::collect::FromIterator::from_iter(@1: T) -> Self where [@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::iter::traits::collect::IntoIterator, @TraitClause1::Item = A, -fn core::ops::try_trait::Try::from_output(@1: Self::Output) -> Self - -fn core::ops::try_trait::Try::branch(@1: Self) -> core::ops::control_flow::ControlFlow[Self::parent_clause0::parent_clause0, Self::parent_clause1] - -fn core::ops::try_trait::FromResidual::from_residual(@1: R) -> Self +fn core::iter::traits::collect::IntoIterator::into_iter(@1: Self) -> Self::IntoIter fn core::iter::traits::collect::Extend::extend<'_0, Self, A, T>(@1: &'_0 mut (Self), @2: T) where @@ -1060,8 +1108,6 @@ unsafe fn core::iter::traits::collect::Extend::extend_one_unchecked<'_0, Self, A where [@TraitClause0]: core::marker::Sized, -fn core::default::Default::default() -> Self - fn core::iter::traits::double_ended::DoubleEndedIterator::next_back<'_0, Self>(@1: &'_0 mut (Self)) -> core::option::Option[Self::parent_clause0::parent_clause0] 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]>] @@ -1098,51 +1144,5 @@ fn core::iter::traits::exact_size::ExactSizeIterator::len<'_0, Self>(@1: &'_0 (S fn core::iter::traits::exact_size::ExactSizeIterator::is_empty<'_0, Self>(@1: &'_0 (Self)) -> bool -fn core::cmp::Ord::cmp<'_0, '_1, Self>(@1: &'_0 (Self), @2: &'_1 (Self)) -> core::cmp::Ordering - -fn core::cmp::Ord::max(@1: Self, @2: Self) -> Self -where - [@TraitClause0]: core::marker::Sized, - -fn core::cmp::Ord::min(@1: Self, @2: Self) -> Self -where - [@TraitClause0]: core::marker::Sized, - -fn core::cmp::Ord::clamp(@1: Self, @2: Self, @3: Self) -> Self -where - [@TraitClause0]: core::marker::Sized, - -fn core::cmp::Eq::assert_receiver_is_total_eq<'_0, Self>(@1: &'_0 (Self)) - -fn core::cmp::PartialEq::eq<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool - -fn core::cmp::PartialEq::ne<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool - -fn core::cmp::PartialOrd::partial_cmp<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> core::option::Option[core::marker::Sized] - -fn core::cmp::PartialOrd::lt<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool - -fn core::cmp::PartialOrd::le<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool - -fn core::cmp::PartialOrd::gt<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool - -fn core::cmp::PartialOrd::ge<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool - -fn core::iter::traits::accum::Sum::sum(@1: I) -> Self -where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::iter::traits::iterator::Iterator, - @TraitClause1::Item = A, - -fn core::iter::traits::accum::Product::product(@1: I) -> Self -where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::iter::traits::iterator::Iterator, - @TraitClause1::Item = A, - -fn core::iter::adapters::zip::TrustedRandomAccessNoCoerce::size<'_0, Self>(@1: &'_0 (Self)) -> usize -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - diff --git a/charon/tests/ui/issue-4-slice-try-into-array.out b/charon/tests/ui/issue-4-slice-try-into-array.out index 5983f7dc..8b1b6dce 100644 --- a/charon/tests/ui/issue-4-slice-try-into-array.out +++ b/charon/tests/ui/issue-4-slice-try-into-array.out @@ -19,7 +19,7 @@ trait core::convert::TryFrom parent_clause1 : [@TraitClause1]: core::marker::Sized parent_clause2 : [@TraitClause2]: core::marker::Sized type Error - fn try_from : core::convert::TryFrom::try_from + fn try_from = core::convert::TryFrom::try_from } fn core::convert::{impl core::convert::TryInto for T}#6::try_into(@1: T) -> core::result::Result[@TraitClause1, @TraitClause2::parent_clause2] @@ -31,8 +31,8 @@ where trait core::clone::Clone { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn clone : core::clone::Clone::clone - fn clone_from : core::clone::Clone::clone_from + fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self> + fn clone_from<'_0, '_1> = core::clone::Clone::clone_from<'_0_0, '_0_1, Self> } trait core::marker::Copy @@ -54,7 +54,7 @@ where parent_clause1 = core::marker::Sized<&'_ (Slice)> parent_clause2 = core::marker::Sized type Error = core::array::TryFromSliceError - fn try_from = core::array::{impl core::convert::TryFrom<&'_0 (Slice)> for Array}#7::try_from + fn try_from = core::array::{impl core::convert::TryFrom<&'_0 (Slice)> for Array}#7::try_from<'_0, T, const N : usize>[@TraitClause0, @TraitClause1] } fn core::clone::impls::{impl core::clone::Clone for u8}#6::clone<'_0>(@1: &'_0 (u8)) -> u8 @@ -62,7 +62,7 @@ fn core::clone::impls::{impl core::clone::Clone for u8}#6::clone<'_0>(@1: &'_0 ( impl core::clone::impls::{impl core::clone::Clone for u8}#6 : core::clone::Clone { parent_clause0 = core::marker::Sized - fn clone = core::clone::impls::{impl core::clone::Clone for u8}#6::clone + fn clone<'_0> = core::clone::impls::{impl core::clone::Clone for u8}#6::clone<'_0_0> } impl core::marker::{impl core::marker::Copy for u8}#38 : core::marker::Copy @@ -78,7 +78,7 @@ struct core::fmt::Error = {} trait core::fmt::Debug { - fn fmt : core::fmt::Debug::fmt + fn fmt<'_0, '_1, '_2> = core::fmt::Debug::fmt<'_0_0, '_0_1, '_0_2, Self> } fn core::result::{core::result::Result[@TraitClause0, @TraitClause1]}::unwrap(@1: core::result::Result[@TraitClause0, @TraitClause1]) -> T @@ -91,7 +91,7 @@ fn core::array::{impl core::fmt::Debug for core::array::TryFromSliceError}#26::f impl core::array::{impl core::fmt::Debug for core::array::TryFromSliceError}#26 : core::fmt::Debug { - fn fmt = core::array::{impl core::fmt::Debug for core::array::TryFromSliceError}#26::fmt + fn fmt<'_0, '_1, '_2> = core::array::{impl core::fmt::Debug for core::array::TryFromSliceError}#26::fmt<'_0_0, '_0_1, '_0_2> } fn test_crate::trait_error<'_0>(@1: &'_0 (Slice)) @@ -124,7 +124,7 @@ trait core::convert::TryInto parent_clause1 : [@TraitClause1]: core::marker::Sized parent_clause2 : [@TraitClause2]: core::marker::Sized type Error - fn try_into : core::convert::TryInto::try_into + fn try_into = core::convert::TryInto::try_into } impl core::convert::{impl core::convert::TryInto for T}#6 : core::convert::TryInto @@ -137,7 +137,7 @@ where parent_clause1 = @TraitClause1 parent_clause2 = @TraitClause2::parent_clause2 type Error = @TraitClause2::Error - fn try_into = core::convert::{impl core::convert::TryInto for T}#6::try_into + fn try_into = core::convert::{impl core::convert::TryInto for T}#6::try_into[@TraitClause0, @TraitClause1, @TraitClause2] } fn core::convert::TryFrom::try_from(@1: T) -> core::result::Result[Self::parent_clause0, Self::parent_clause2] diff --git a/charon/tests/ui/issue-4-traits.out b/charon/tests/ui/issue-4-traits.out index 5983f7dc..8b1b6dce 100644 --- a/charon/tests/ui/issue-4-traits.out +++ b/charon/tests/ui/issue-4-traits.out @@ -19,7 +19,7 @@ trait core::convert::TryFrom parent_clause1 : [@TraitClause1]: core::marker::Sized parent_clause2 : [@TraitClause2]: core::marker::Sized type Error - fn try_from : core::convert::TryFrom::try_from + fn try_from = core::convert::TryFrom::try_from } fn core::convert::{impl core::convert::TryInto for T}#6::try_into(@1: T) -> core::result::Result[@TraitClause1, @TraitClause2::parent_clause2] @@ -31,8 +31,8 @@ where trait core::clone::Clone { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn clone : core::clone::Clone::clone - fn clone_from : core::clone::Clone::clone_from + fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self> + fn clone_from<'_0, '_1> = core::clone::Clone::clone_from<'_0_0, '_0_1, Self> } trait core::marker::Copy @@ -54,7 +54,7 @@ where parent_clause1 = core::marker::Sized<&'_ (Slice)> parent_clause2 = core::marker::Sized type Error = core::array::TryFromSliceError - fn try_from = core::array::{impl core::convert::TryFrom<&'_0 (Slice)> for Array}#7::try_from + fn try_from = core::array::{impl core::convert::TryFrom<&'_0 (Slice)> for Array}#7::try_from<'_0, T, const N : usize>[@TraitClause0, @TraitClause1] } fn core::clone::impls::{impl core::clone::Clone for u8}#6::clone<'_0>(@1: &'_0 (u8)) -> u8 @@ -62,7 +62,7 @@ fn core::clone::impls::{impl core::clone::Clone for u8}#6::clone<'_0>(@1: &'_0 ( impl core::clone::impls::{impl core::clone::Clone for u8}#6 : core::clone::Clone { parent_clause0 = core::marker::Sized - fn clone = core::clone::impls::{impl core::clone::Clone for u8}#6::clone + fn clone<'_0> = core::clone::impls::{impl core::clone::Clone for u8}#6::clone<'_0_0> } impl core::marker::{impl core::marker::Copy for u8}#38 : core::marker::Copy @@ -78,7 +78,7 @@ struct core::fmt::Error = {} trait core::fmt::Debug { - fn fmt : core::fmt::Debug::fmt + fn fmt<'_0, '_1, '_2> = core::fmt::Debug::fmt<'_0_0, '_0_1, '_0_2, Self> } fn core::result::{core::result::Result[@TraitClause0, @TraitClause1]}::unwrap(@1: core::result::Result[@TraitClause0, @TraitClause1]) -> T @@ -91,7 +91,7 @@ fn core::array::{impl core::fmt::Debug for core::array::TryFromSliceError}#26::f impl core::array::{impl core::fmt::Debug for core::array::TryFromSliceError}#26 : core::fmt::Debug { - fn fmt = core::array::{impl core::fmt::Debug for core::array::TryFromSliceError}#26::fmt + fn fmt<'_0, '_1, '_2> = core::array::{impl core::fmt::Debug for core::array::TryFromSliceError}#26::fmt<'_0_0, '_0_1, '_0_2> } fn test_crate::trait_error<'_0>(@1: &'_0 (Slice)) @@ -124,7 +124,7 @@ trait core::convert::TryInto parent_clause1 : [@TraitClause1]: core::marker::Sized parent_clause2 : [@TraitClause2]: core::marker::Sized type Error - fn try_into : core::convert::TryInto::try_into + fn try_into = core::convert::TryInto::try_into } impl core::convert::{impl core::convert::TryInto for T}#6 : core::convert::TryInto @@ -137,7 +137,7 @@ where parent_clause1 = @TraitClause1 parent_clause2 = @TraitClause2::parent_clause2 type Error = @TraitClause2::Error - fn try_into = core::convert::{impl core::convert::TryInto for T}#6::try_into + fn try_into = core::convert::{impl core::convert::TryInto for T}#6::try_into[@TraitClause0, @TraitClause1, @TraitClause2] } fn core::convert::TryFrom::try_from(@1: T) -> core::result::Result[Self::parent_clause0, Self::parent_clause2] diff --git a/charon/tests/ui/issue-45-misc.out b/charon/tests/ui/issue-45-misc.out index 7f88717f..124cf061 100644 --- a/charon/tests/ui/issue-45-misc.out +++ b/charon/tests/ui/issue-45-misc.out @@ -20,7 +20,7 @@ trait core::ops::function::FnOnce parent_clause1 : [@TraitClause1]: core::marker::Tuple parent_clause2 : [@TraitClause2]: core::marker::Sized type Output - fn call_once : core::ops::function::FnOnce::call_once + fn call_once = core::ops::function::FnOnce::call_once } trait core::ops::function::FnMut @@ -28,7 +28,7 @@ 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 : core::ops::function::FnMut::call_mut + fn call_mut<'_0> = core::ops::function::FnMut::call_mut<'_0_0, Self, Args> } fn core::array::{Array}#23::map(@1: Array, @2: F) -> Array @@ -95,8 +95,8 @@ opaque type core::array::iter::IntoIter trait core::clone::Clone { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn clone : core::clone::Clone::clone - fn clone_from : core::clone::Clone::clone_from + fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self> + fn clone_from<'_0, '_1> = core::clone::Clone::clone_from<'_0_0, '_0_1, Self> } trait core::marker::Copy @@ -127,7 +127,7 @@ fn core::clone::impls::{impl core::clone::Clone for usize}#5::clone<'_0>(@1: &'_ impl core::clone::impls::{impl core::clone::Clone for usize}#5 : core::clone::Clone { parent_clause0 = core::marker::Sized - fn clone = core::clone::impls::{impl core::clone::Clone for usize}#5::clone + 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 @@ -144,7 +144,7 @@ fn core::num::nonzero::private::{impl core::clone::Clone for core::num::nonzero: 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 = core::num::nonzero::private::{impl core::clone::Clone for core::num::nonzero::private::NonZeroUsizeInner}#26::clone + 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 @@ -237,7 +237,7 @@ opaque type core::iter::adapters::inspect::Inspect trait core::ops::try_trait::FromResidual { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn from_residual : core::ops::try_trait::FromResidual::from_residual + fn from_residual = core::ops::try_trait::FromResidual::from_residual } enum core::ops::control_flow::ControlFlow @@ -256,8 +256,8 @@ trait core::ops::try_trait::Try parent_clause2 : [@TraitClause2]: core::marker::Sized type Output type Residual - fn from_output : core::ops::try_trait::Try::from_output - fn branch : core::ops::try_trait::Try::branch + fn from_output = core::ops::try_trait::Try::from_output + fn branch = core::ops::try_trait::Try::branch } trait core::ops::try_trait::Residual @@ -275,19 +275,19 @@ where trait core::default::Default { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn default : core::default::Default::default + fn default = core::default::Default::default } trait core::cmp::PartialEq { - fn eq : core::cmp::PartialEq::eq - fn ne : core::cmp::PartialEq::ne + fn eq<'_0, '_1> = core::cmp::PartialEq::eq<'_0_0, '_0_1, Self, Rhs> + fn ne<'_0, '_1> = core::cmp::PartialEq::ne<'_0_0, '_0_1, Self, Rhs> } trait core::cmp::Eq { parent_clause0 : [@TraitClause0]: core::cmp::PartialEq - fn assert_receiver_is_total_eq : core::cmp::Eq::assert_receiver_is_total_eq + fn assert_receiver_is_total_eq<'_0> = core::cmp::Eq::assert_receiver_is_total_eq<'_0_0, Self> } enum core::cmp::Ordering = @@ -299,21 +299,21 @@ enum core::cmp::Ordering = trait core::cmp::PartialOrd { parent_clause0 : [@TraitClause0]: core::cmp::PartialEq - fn partial_cmp : core::cmp::PartialOrd::partial_cmp - fn lt : core::cmp::PartialOrd::lt - fn le : core::cmp::PartialOrd::le - fn gt : core::cmp::PartialOrd::gt - fn ge : core::cmp::PartialOrd::ge + fn partial_cmp<'_0, '_1> = core::cmp::PartialOrd::partial_cmp<'_0_0, '_0_1, Self, Rhs> + fn lt<'_0, '_1> = core::cmp::PartialOrd::lt<'_0_0, '_0_1, Self, Rhs> + fn le<'_0, '_1> = core::cmp::PartialOrd::le<'_0_0, '_0_1, Self, Rhs> + fn gt<'_0, '_1> = core::cmp::PartialOrd::gt<'_0_0, '_0_1, Self, Rhs> + fn ge<'_0, '_1> = core::cmp::PartialOrd::ge<'_0_0, '_0_1, Self, Rhs> } trait core::cmp::Ord { parent_clause0 : [@TraitClause0]: core::cmp::Eq parent_clause1 : [@TraitClause1]: core::cmp::PartialOrd - fn cmp : core::cmp::Ord::cmp - fn max : core::cmp::Ord::max - fn min : core::cmp::Ord::min - fn clamp : core::cmp::Ord::clamp + fn cmp<'_0, '_1> = core::cmp::Ord::cmp<'_0_0, '_0_1, Self> + fn max<[@TraitClause0]: core::marker::Sized> = core::cmp::Ord::max[@TraitClause0_0] + fn min<[@TraitClause0]: core::marker::Sized> = core::cmp::Ord::min[@TraitClause0_0] + fn clamp<[@TraitClause0]: core::marker::Sized> = core::cmp::Ord::clamp[@TraitClause0_0] } opaque type core::iter::adapters::rev::Rev @@ -336,83 +336,83 @@ trait core::iter::traits::iterator::Iterator { parent_clause0 : [@TraitClause0]: core::marker::Sized type Item - fn next : core::iter::traits::iterator::Iterator::next - fn next_chunk : core::iter::traits::iterator::Iterator::next_chunk - fn size_hint : core::iter::traits::iterator::Iterator::size_hint - fn count : core::iter::traits::iterator::Iterator::count - fn last : core::iter::traits::iterator::Iterator::last - fn advance_by : core::iter::traits::iterator::Iterator::advance_by - fn nth : core::iter::traits::iterator::Iterator::nth - fn step_by : core::iter::traits::iterator::Iterator::step_by - fn chain : core::iter::traits::iterator::Iterator::chain - fn zip : core::iter::traits::iterator::Iterator::zip - fn intersperse : core::iter::traits::iterator::Iterator::intersperse - fn intersperse_with : core::iter::traits::iterator::Iterator::intersperse_with - fn map : core::iter::traits::iterator::Iterator::map - fn for_each : core::iter::traits::iterator::Iterator::for_each - fn filter : core::iter::traits::iterator::Iterator::filter - fn filter_map : core::iter::traits::iterator::Iterator::filter_map - fn enumerate : core::iter::traits::iterator::Iterator::enumerate - fn peekable : core::iter::traits::iterator::Iterator::peekable - fn skip_while : core::iter::traits::iterator::Iterator::skip_while - fn take_while : core::iter::traits::iterator::Iterator::take_while - fn map_while : core::iter::traits::iterator::Iterator::map_while - fn skip : core::iter::traits::iterator::Iterator::skip - fn take : core::iter::traits::iterator::Iterator::take - fn scan : core::iter::traits::iterator::Iterator::scan - fn flat_map : core::iter::traits::iterator::Iterator::flat_map - fn flatten : core::iter::traits::iterator::Iterator::flatten - fn map_windows : core::iter::traits::iterator::Iterator::map_windows - fn fuse : core::iter::traits::iterator::Iterator::fuse - fn inspect : core::iter::traits::iterator::Iterator::inspect - fn by_ref : core::iter::traits::iterator::Iterator::by_ref - fn collect : core::iter::traits::iterator::Iterator::collect - fn try_collect : core::iter::traits::iterator::Iterator::try_collect - fn collect_into : core::iter::traits::iterator::Iterator::collect_into - fn partition : core::iter::traits::iterator::Iterator::partition - fn partition_in_place : core::iter::traits::iterator::Iterator::partition_in_place - fn is_partitioned : core::iter::traits::iterator::Iterator::is_partitioned - fn try_fold : core::iter::traits::iterator::Iterator::try_fold - fn try_for_each : core::iter::traits::iterator::Iterator::try_for_each - fn fold : core::iter::traits::iterator::Iterator::fold - fn reduce : core::iter::traits::iterator::Iterator::reduce - fn try_reduce : core::iter::traits::iterator::Iterator::try_reduce - fn all : core::iter::traits::iterator::Iterator::all - fn any : core::iter::traits::iterator::Iterator::any - fn find : core::iter::traits::iterator::Iterator::find - fn find_map : core::iter::traits::iterator::Iterator::find_map - fn try_find : core::iter::traits::iterator::Iterator::try_find - fn position : core::iter::traits::iterator::Iterator::position - fn rposition : core::iter::traits::iterator::Iterator::rposition - fn max : core::iter::traits::iterator::Iterator::max - fn min : core::iter::traits::iterator::Iterator::min - fn max_by_key : core::iter::traits::iterator::Iterator::max_by_key - fn max_by : core::iter::traits::iterator::Iterator::max_by - fn min_by_key : core::iter::traits::iterator::Iterator::min_by_key - fn min_by : core::iter::traits::iterator::Iterator::min_by - fn rev : core::iter::traits::iterator::Iterator::rev - fn unzip : core::iter::traits::iterator::Iterator::unzip - fn copied : core::iter::traits::iterator::Iterator::copied - fn cloned : core::iter::traits::iterator::Iterator::cloned - fn cycle : core::iter::traits::iterator::Iterator::cycle - fn array_chunks : core::iter::traits::iterator::Iterator::array_chunks - fn sum : core::iter::traits::iterator::Iterator::sum - fn product : core::iter::traits::iterator::Iterator::product - fn cmp : core::iter::traits::iterator::Iterator::cmp - fn cmp_by : core::iter::traits::iterator::Iterator::cmp_by - fn partial_cmp : core::iter::traits::iterator::Iterator::partial_cmp - fn partial_cmp_by : core::iter::traits::iterator::Iterator::partial_cmp_by - fn eq : core::iter::traits::iterator::Iterator::eq - fn eq_by : core::iter::traits::iterator::Iterator::eq_by - fn ne : core::iter::traits::iterator::Iterator::ne - fn lt : core::iter::traits::iterator::Iterator::lt - fn le : core::iter::traits::iterator::Iterator::le - fn gt : core::iter::traits::iterator::Iterator::gt - fn ge : core::iter::traits::iterator::Iterator::ge - fn is_sorted : core::iter::traits::iterator::Iterator::is_sorted - fn is_sorted_by : core::iter::traits::iterator::Iterator::is_sorted_by - fn is_sorted_by_key : core::iter::traits::iterator::Iterator::is_sorted_by_key - fn __iterator_get_unchecked : core::iter::traits::iterator::Iterator::__iterator_get_unchecked + fn next<'_0> = core::iter::traits::iterator::Iterator::next<'_0_0, 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>[@TraitClause0_0] + fn size_hint<'_0> = core::iter::traits::iterator::Iterator::size_hint<'_0_0, Self> + fn count<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::count[@TraitClause0_0] + fn last<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::last[@TraitClause0_0] + fn advance_by<'_0> = core::iter::traits::iterator::Iterator::advance_by<'_0_0, Self> + fn nth<'_0> = core::iter::traits::iterator::Iterator::nth<'_0_0, Self> + fn step_by<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::step_by[@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[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn zip, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::iter::traits::collect::IntoIterator> = core::iter::traits::iterator::Iterator::zip[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn intersperse<[@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::clone::Clone> = core::iter::traits::iterator::Iterator::intersperse[@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[@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[@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[@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[@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[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn enumerate<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::enumerate[@TraitClause0_0] + fn peekable<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::peekable[@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[@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[@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[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn skip<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::skip[@TraitClause0_0] + fn take<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::take[@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[@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[@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[@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[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn fuse<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::fuse[@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[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn by_ref<'_0, [@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::by_ref<'_0_0, Self>[@TraitClause0_0] + fn collect, [@TraitClause1]: core::iter::traits::collect::FromIterator, [@TraitClause2]: core::marker::Sized> = core::iter::traits::iterator::Iterator::collect[@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>[@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>[@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[@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>[@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[@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>[@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>[@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[@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[@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>[@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>[@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>[@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>[@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>[@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>[@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>[@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>[@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[@TraitClause0_0, @TraitClause0_1] + fn min<[@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::cmp::Ord> = core::iter::traits::iterator::Iterator::min[@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[@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[@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[@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[@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[@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[@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>[@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>[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn cycle<[@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::clone::Clone> = core::iter::traits::iterator::Iterator::cycle[@TraitClause0_0, @TraitClause0_1] + fn array_chunks> = core::iter::traits::iterator::Iterator::array_chunks[@TraitClause0_0] + fn sum, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::iter::traits::accum::Sum> = core::iter::traits::iterator::Iterator::sum[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn product, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::iter::traits::accum::Product> = core::iter::traits::iterator::Iterator::product[@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[@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[@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[@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[@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[@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[@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[@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[@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[@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[@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[@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[@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[@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[@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>[@TraitClause0_0] } trait core::iter::traits::collect::IntoIterator @@ -424,7 +424,7 @@ where parent_clause2 : [@TraitClause2]: core::marker::Sized type Item type IntoIter - fn into_iter : core::iter::traits::collect::IntoIterator::into_iter + fn into_iter = core::iter::traits::collect::IntoIterator::into_iter } opaque type core::iter::adapters::intersperse::Intersperse @@ -467,34 +467,34 @@ trait core::iter::traits::collect::FromIterator { parent_clause0 : [@TraitClause0]: core::marker::Sized parent_clause1 : [@TraitClause1]: core::marker::Sized - fn from_iter : core::iter::traits::collect::FromIterator::from_iter + fn from_iter, [@TraitClause1]: core::iter::traits::collect::IntoIterator, @TraitClause1_1::Item = A> = core::iter::traits::collect::FromIterator::from_iter[@TraitClause0_0, @TraitClause0_1] } trait core::iter::traits::collect::Extend { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn extend : core::iter::traits::collect::Extend::extend - fn extend_one : core::iter::traits::collect::Extend::extend_one - fn extend_reserve : core::iter::traits::collect::Extend::extend_reserve - fn extend_one_unchecked : core::iter::traits::collect::Extend::extend_one_unchecked + 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>[@TraitClause0_0, @TraitClause0_1] + fn extend_one<'_0> = core::iter::traits::collect::Extend::extend_one<'_0_0, Self, A> + fn extend_reserve<'_0> = core::iter::traits::collect::Extend::extend_reserve<'_0_0, Self, A> + fn extend_one_unchecked<'_0, [@TraitClause0]: core::marker::Sized> = core::iter::traits::collect::Extend::extend_one_unchecked<'_0_0, Self, A>[@TraitClause0_0] } trait core::iter::traits::double_ended::DoubleEndedIterator { parent_clause0 : [@TraitClause0]: core::iter::traits::iterator::Iterator - fn next_back : core::iter::traits::double_ended::DoubleEndedIterator::next_back - fn advance_back_by : core::iter::traits::double_ended::DoubleEndedIterator::advance_back_by - fn nth_back : core::iter::traits::double_ended::DoubleEndedIterator::nth_back - fn try_rfold : core::iter::traits::double_ended::DoubleEndedIterator::try_rfold - fn rfold : core::iter::traits::double_ended::DoubleEndedIterator::rfold - fn rfind : core::iter::traits::double_ended::DoubleEndedIterator::rfind + fn next_back<'_0> = core::iter::traits::double_ended::DoubleEndedIterator::next_back<'_0_0, Self> + fn advance_back_by<'_0> = core::iter::traits::double_ended::DoubleEndedIterator::advance_back_by<'_0_0, Self> + fn nth_back<'_0> = core::iter::traits::double_ended::DoubleEndedIterator::nth_back<'_0_0, 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>[@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[@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>[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2] } trait core::iter::traits::exact_size::ExactSizeIterator { parent_clause0 : [@TraitClause0]: core::iter::traits::iterator::Iterator - fn len : core::iter::traits::exact_size::ExactSizeIterator::len - fn is_empty : core::iter::traits::exact_size::ExactSizeIterator::is_empty + fn len<'_0> = core::iter::traits::exact_size::ExactSizeIterator::len<'_0_0, Self> + fn is_empty<'_0> = core::iter::traits::exact_size::ExactSizeIterator::is_empty<'_0_0, Self> } opaque type core::iter::adapters::array_chunks::ArrayChunks @@ -506,21 +506,21 @@ trait core::iter::traits::accum::Sum { parent_clause0 : [@TraitClause0]: core::marker::Sized parent_clause1 : [@TraitClause1]: core::marker::Sized - fn sum : core::iter::traits::accum::Sum::sum + fn sum, [@TraitClause1]: core::iter::traits::iterator::Iterator, @TraitClause1_1::Item = A> = core::iter::traits::accum::Sum::sum[@TraitClause0_0, @TraitClause0_1] } trait core::iter::traits::accum::Product { parent_clause0 : [@TraitClause0]: core::marker::Sized parent_clause1 : [@TraitClause1]: core::marker::Sized - fn product : core::iter::traits::accum::Product::product + fn product, [@TraitClause1]: core::iter::traits::iterator::Iterator, @TraitClause1_1::Item = A> = core::iter::traits::accum::Product::product[@TraitClause0_0, @TraitClause0_1] } trait core::iter::adapters::zip::TrustedRandomAccessNoCoerce { parent_clause0 : [@TraitClause0]: core::marker::Sized const MAY_HAVE_SIDE_EFFECT : bool - fn size : core::iter::adapters::zip::TrustedRandomAccessNoCoerce::size + fn size<'_0, [@TraitClause0]: core::iter::traits::iterator::Iterator> = core::iter::adapters::zip::TrustedRandomAccessNoCoerce::size<'_0_0, Self>[@TraitClause0_0] } fn core::iter::traits::collect::{impl core::iter::traits::collect::IntoIterator for I}#1::into_iter(@1: I) -> I @@ -533,13 +533,13 @@ trait core::iter::range::Step parent_clause0 : [@TraitClause0]: core::marker::Sized parent_clause1 : [@TraitClause1]: core::clone::Clone parent_clause2 : [@TraitClause2]: core::cmp::PartialOrd - fn steps_between : core::iter::range::Step::steps_between - fn forward_checked : core::iter::range::Step::forward_checked - fn backward_checked : core::iter::range::Step::backward_checked - fn forward : core::iter::range::Step::forward - fn forward_unchecked : core::iter::range::Step::forward_unchecked - fn backward : core::iter::range::Step::backward - fn backward_unchecked : core::iter::range::Step::backward_unchecked + fn steps_between<'_0, '_1> = core::iter::range::Step::steps_between<'_0_0, '_0_1, Self> + fn forward_checked = core::iter::range::Step::forward_checked + fn backward_checked = core::iter::range::Step::backward_checked + fn forward = core::iter::range::Step::forward + fn forward_unchecked = core::iter::range::Step::forward_unchecked + fn backward = core::iter::range::Step::backward + fn backward_unchecked = core::iter::range::Step::backward_unchecked } fn core::iter::range::{impl core::iter::traits::iterator::Iterator for core::ops::range::Range[@TraitClause0]}#6::next<'_0, A>(@1: &'_0 mut (core::ops::range::Range[@TraitClause0])) -> core::option::Option[@TraitClause0] @@ -602,16 +602,16 @@ where { parent_clause0 = @TraitClause0 type Item = A - fn next = core::iter::range::{impl core::iter::traits::iterator::Iterator for core::ops::range::Range[@TraitClause0]}#6::next - fn size_hint = core::iter::range::{impl core::iter::traits::iterator::Iterator for core::ops::range::Range[@TraitClause0]}#6::size_hint - fn count = core::iter::range::{impl core::iter::traits::iterator::Iterator for core::ops::range::Range[@TraitClause0]}#6::count - fn last = core::iter::range::{impl core::iter::traits::iterator::Iterator for core::ops::range::Range[@TraitClause0]}#6::last - fn advance_by = core::iter::range::{impl core::iter::traits::iterator::Iterator for core::ops::range::Range[@TraitClause0]}#6::advance_by - fn nth = core::iter::range::{impl core::iter::traits::iterator::Iterator for core::ops::range::Range[@TraitClause0]}#6::nth - fn max = core::iter::range::{impl core::iter::traits::iterator::Iterator for core::ops::range::Range[@TraitClause0]}#6::max - fn min = core::iter::range::{impl core::iter::traits::iterator::Iterator for core::ops::range::Range[@TraitClause0]}#6::min - fn is_sorted = core::iter::range::{impl core::iter::traits::iterator::Iterator for core::ops::range::Range[@TraitClause0]}#6::is_sorted - fn __iterator_get_unchecked = core::iter::range::{impl core::iter::traits::iterator::Iterator for core::ops::range::Range[@TraitClause0]}#6::__iterator_get_unchecked + fn next<'_0> = core::iter::range::{impl core::iter::traits::iterator::Iterator for core::ops::range::Range[@TraitClause0]}#6::next<'_0_0, A>[@TraitClause0, @TraitClause1] + fn size_hint<'_0> = core::iter::range::{impl core::iter::traits::iterator::Iterator for core::ops::range::Range[@TraitClause0]}#6::size_hint<'_0_0, A>[@TraitClause0, @TraitClause1] + fn count = core::iter::range::{impl core::iter::traits::iterator::Iterator for core::ops::range::Range[@TraitClause0]}#6::count[@TraitClause0, @TraitClause1] + fn last = core::iter::range::{impl core::iter::traits::iterator::Iterator for core::ops::range::Range[@TraitClause0]}#6::last[@TraitClause0, @TraitClause1] + fn advance_by<'_0> = core::iter::range::{impl core::iter::traits::iterator::Iterator for core::ops::range::Range[@TraitClause0]}#6::advance_by<'_0_0, A>[@TraitClause0, @TraitClause1] + fn nth<'_0> = core::iter::range::{impl core::iter::traits::iterator::Iterator for core::ops::range::Range[@TraitClause0]}#6::nth<'_0_0, A>[@TraitClause0, @TraitClause1] + fn max<[@TraitClause0]: core::cmp::Ord> = core::iter::range::{impl core::iter::traits::iterator::Iterator for core::ops::range::Range[@TraitClause0]}#6::max[@TraitClause0, @TraitClause1, @TraitClause0_0] + fn min<[@TraitClause0]: core::cmp::Ord> = core::iter::range::{impl core::iter::traits::iterator::Iterator for core::ops::range::Range[@TraitClause0]}#6::min[@TraitClause0, @TraitClause1, @TraitClause0_0] + fn is_sorted = core::iter::range::{impl core::iter::traits::iterator::Iterator for core::ops::range::Range[@TraitClause0]}#6::is_sorted[@TraitClause0, @TraitClause1] + fn __iterator_get_unchecked<'_0, [@TraitClause0]: core::iter::adapters::zip::TrustedRandomAccessNoCoerce[@TraitClause0]>> = core::iter::range::{impl core::iter::traits::iterator::Iterator for core::ops::range::Range[@TraitClause0]}#6::__iterator_get_unchecked<'_0_0, A>[@TraitClause0, @TraitClause1, @TraitClause0_0] } fn core::clone::impls::{impl core::clone::Clone for u8}#6::clone<'_0>(@1: &'_0 (u8)) -> u8 @@ -619,7 +619,7 @@ fn core::clone::impls::{impl core::clone::Clone for u8}#6::clone<'_0>(@1: &'_0 ( impl core::clone::impls::{impl core::clone::Clone for u8}#6 : core::clone::Clone { parent_clause0 = core::marker::Sized - fn clone = core::clone::impls::{impl core::clone::Clone for u8}#6::clone + fn clone<'_0> = core::clone::impls::{impl core::clone::Clone for u8}#6::clone<'_0_0> } fn core::cmp::impls::{impl core::cmp::PartialEq for u8}#22::eq<'_0, '_1>(@1: &'_0 (u8), @2: &'_1 (u8)) -> bool @@ -628,8 +628,8 @@ fn core::cmp::impls::{impl core::cmp::PartialEq for u8}#22::ne<'_0, '_1>(@1: impl core::cmp::impls::{impl core::cmp::PartialEq for u8}#22 : core::cmp::PartialEq { - fn eq = core::cmp::impls::{impl core::cmp::PartialEq for u8}#22::eq - fn ne = core::cmp::impls::{impl core::cmp::PartialEq for u8}#22::ne + fn eq<'_0, '_1> = core::cmp::impls::{impl core::cmp::PartialEq for u8}#22::eq<'_0_0, '_0_1> + fn ne<'_0, '_1> = core::cmp::impls::{impl core::cmp::PartialEq for u8}#22::ne<'_0_0, '_0_1> } fn core::cmp::impls::{impl core::cmp::PartialOrd for u8}#60::partial_cmp<'_0, '_1>(@1: &'_0 (u8), @2: &'_1 (u8)) -> core::option::Option[core::marker::Sized] @@ -645,11 +645,11 @@ fn core::cmp::impls::{impl core::cmp::PartialOrd for u8}#60::ge<'_0, '_1>(@1 impl core::cmp::impls::{impl core::cmp::PartialOrd for u8}#60 : core::cmp::PartialOrd { parent_clause0 = core::cmp::impls::{impl core::cmp::PartialEq for u8}#22 - fn partial_cmp = core::cmp::impls::{impl core::cmp::PartialOrd for u8}#60::partial_cmp - fn lt = core::cmp::impls::{impl core::cmp::PartialOrd for u8}#60::lt - fn le = core::cmp::impls::{impl core::cmp::PartialOrd for u8}#60::le - fn gt = core::cmp::impls::{impl core::cmp::PartialOrd for u8}#60::gt - fn ge = core::cmp::impls::{impl core::cmp::PartialOrd for u8}#60::ge + fn partial_cmp<'_0, '_1> = core::cmp::impls::{impl core::cmp::PartialOrd for u8}#60::partial_cmp<'_0_0, '_0_1> + fn lt<'_0, '_1> = core::cmp::impls::{impl core::cmp::PartialOrd for u8}#60::lt<'_0_0, '_0_1> + fn le<'_0, '_1> = core::cmp::impls::{impl core::cmp::PartialOrd for u8}#60::le<'_0_0, '_0_1> + fn gt<'_0, '_1> = core::cmp::impls::{impl core::cmp::PartialOrd for u8}#60::gt<'_0_0, '_0_1> + fn ge<'_0, '_1> = core::cmp::impls::{impl core::cmp::PartialOrd for u8}#60::ge<'_0_0, '_0_1> } fn core::iter::range::{impl core::iter::range::Step for u8}#35::steps_between<'_0, '_1>(@1: &'_0 (u8), @2: &'_1 (u8)) -> core::option::Option[core::marker::Sized] @@ -671,7 +671,7 @@ impl core::iter::range::{impl core::iter::range::Step for u8}#35 : core::iter::r parent_clause0 = core::marker::Sized parent_clause1 = core::clone::impls::{impl core::clone::Clone for u8}#6 parent_clause2 = core::cmp::impls::{impl core::cmp::PartialOrd for u8}#60 - fn steps_between = core::iter::range::{impl core::iter::range::Step for u8}#35::steps_between + fn steps_between<'_0, '_1> = core::iter::range::{impl core::iter::range::Step for u8}#35::steps_between<'_0_0, '_0_1> fn forward_checked = core::iter::range::{impl core::iter::range::Step for u8}#35::forward_checked fn backward_checked = core::iter::range::{impl core::iter::range::Step for u8}#35::backward_checked fn forward = core::iter::range::{impl core::iter::range::Step for u8}#35::forward @@ -866,7 +866,7 @@ where 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 + 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[Self::parent_clause0] @@ -1448,11 +1448,7 @@ unsafe fn core::iter::traits::iterator::Iterator::__iterator_get_unchecked<'_0, where [@TraitClause0]: core::iter::adapters::zip::TrustedRandomAccessNoCoerce, -fn core::iter::traits::collect::FromIterator::from_iter(@1: T) -> Self -where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::iter::traits::collect::IntoIterator, - @TraitClause1::Item = A, +fn core::default::Default::default() -> Self fn core::ops::try_trait::Try::from_output(@1: Self::Output) -> Self @@ -1460,6 +1456,24 @@ fn core::ops::try_trait::Try::branch(@1: Self) -> core::ops::control_flow: fn core::ops::try_trait::FromResidual::from_residual(@1: R) -> Self +fn core::iter::traits::accum::Sum::sum(@1: I) -> Self +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::iter::traits::iterator::Iterator, + @TraitClause1::Item = A, + +fn core::iter::traits::accum::Product::product(@1: I) -> Self +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::iter::traits::iterator::Iterator, + @TraitClause1::Item = A, + +fn core::iter::traits::collect::FromIterator::from_iter(@1: T) -> Self +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::iter::traits::collect::IntoIterator, + @TraitClause1::Item = A, + fn core::iter::traits::collect::Extend::extend<'_0, Self, A, T>(@1: &'_0 mut (Self), @2: T) where [@TraitClause0]: core::marker::Sized, @@ -1474,8 +1488,6 @@ unsafe fn core::iter::traits::collect::Extend::extend_one_unchecked<'_0, Self, A where [@TraitClause0]: core::marker::Sized, -fn core::default::Default::default() -> Self - fn core::iter::traits::double_ended::DoubleEndedIterator::next_back<'_0, Self>(@1: &'_0 mut (Self)) -> core::option::Option[Self::parent_clause0::parent_clause0] 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]>] @@ -1512,17 +1524,5 @@ fn core::iter::traits::exact_size::ExactSizeIterator::len<'_0, Self>(@1: &'_0 (S fn core::iter::traits::exact_size::ExactSizeIterator::is_empty<'_0, Self>(@1: &'_0 (Self)) -> bool -fn core::iter::traits::accum::Sum::sum(@1: I) -> Self -where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::iter::traits::iterator::Iterator, - @TraitClause1::Item = A, - -fn core::iter::traits::accum::Product::product(@1: I) -> Self -where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::iter::traits::iterator::Iterator, - @TraitClause1::Item = A, - diff --git a/charon/tests/ui/issue-70-override-provided-method.2.out b/charon/tests/ui/issue-70-override-provided-method.2.out index 00c7f4a9..73195837 100644 --- a/charon/tests/ui/issue-70-override-provided-method.2.out +++ b/charon/tests/ui/issue-70-override-provided-method.2.out @@ -2,9 +2,9 @@ trait test_crate::Trait { - fn required : test_crate::Trait::required - fn provided1 : test_crate::Trait::provided1 - fn provided2 : test_crate::Trait::provided2 + fn required<'_0> = test_crate::Trait::required<'_0_0, Self> + fn provided1<'_0> = test_crate::Trait::provided1<'_0_0, Self> + fn provided2<'_0> = test_crate::Trait::provided2<'_0_0, Self> } struct test_crate::Foo = {} @@ -79,7 +79,7 @@ fn test_crate::{impl test_crate::Trait for test_crate::Foo}::required<'_0>(@1: & impl test_crate::{impl test_crate::Trait for test_crate::Foo} : test_crate::Trait { - fn required = test_crate::{impl test_crate::Trait for test_crate::Foo}::required + fn required<'_0> = test_crate::{impl test_crate::Trait for test_crate::Foo}::required<'_0_0> } struct test_crate::Bar = {} @@ -122,8 +122,8 @@ fn test_crate::{impl test_crate::Trait for test_crate::Bar}#1::provided1<'_0>(@1 impl test_crate::{impl test_crate::Trait for test_crate::Bar}#1 : test_crate::Trait { - fn required = test_crate::{impl test_crate::Trait for test_crate::Bar}#1::required - fn provided1 = test_crate::{impl test_crate::Trait for test_crate::Bar}#1::provided1 + fn required<'_0> = test_crate::{impl test_crate::Trait for test_crate::Bar}#1::required<'_0_0> + fn provided1<'_0> = test_crate::{impl test_crate::Trait for test_crate::Bar}#1::provided1<'_0_0> } diff --git a/charon/tests/ui/issue-70-override-provided-method.3.out b/charon/tests/ui/issue-70-override-provided-method.3.out index a410dbbe..6c976ee7 100644 --- a/charon/tests/ui/issue-70-override-provided-method.3.out +++ b/charon/tests/ui/issue-70-override-provided-method.3.out @@ -5,22 +5,22 @@ trait core::marker::Sized trait core::clone::Clone { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn clone : core::clone::Clone::clone - fn clone_from : core::clone::Clone::clone_from + fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self> + fn clone_from<'_0, '_1> = core::clone::Clone::clone_from<'_0_0, '_0_1, Self> } trait core::cmp::PartialEq { - fn eq : core::cmp::PartialEq::eq - fn ne : core::cmp::PartialEq::ne + fn eq<'_0, '_1> = core::cmp::PartialEq::eq<'_0_0, '_0_1, Self, Rhs> + fn ne<'_0, '_1> = core::cmp::PartialEq::ne<'_0_0, '_0_1, Self, Rhs> } trait test_crate::GenericTrait { parent_clause0 : [@TraitClause0]: core::marker::Sized parent_clause1 : [@TraitClause1]: core::clone::Clone - fn other_method : test_crate::GenericTrait::other_method - fn provided : test_crate::GenericTrait::provided + fn other_method = test_crate::GenericTrait::other_method + fn provided, [@TraitClause1]: core::cmp::PartialEq> = test_crate::GenericTrait::provided[@TraitClause0_0, @TraitClause0_1] } struct test_crate::Override @@ -60,8 +60,8 @@ where [@TraitClause1]: core::clone::Clone, { parent_clause0 = core::marker::Sized[@TraitClause0]> - fn clone = core::option::{impl core::clone::Clone for core::option::Option[@TraitClause0]}#5::clone - fn clone_from = core::option::{impl core::clone::Clone for core::option::Option[@TraitClause0]}#5::clone_from + fn clone<'_0> = core::option::{impl core::clone::Clone for core::option::Option[@TraitClause0]}#5::clone<'_0_0, T>[@TraitClause0, @TraitClause1] + fn clone_from<'_0, '_1> = core::option::{impl core::clone::Clone for core::option::Option[@TraitClause0]}#5::clone_from<'_0_0, '_0_1, T>[@TraitClause0, @TraitClause1] } fn test_crate::{impl test_crate::GenericTrait[@TraitClause0]> for test_crate::Override[@TraitClause0]}::other_method() @@ -122,8 +122,8 @@ where { parent_clause0 = core::marker::Sized[@TraitClause0]> parent_clause1 = core::option::{impl core::clone::Clone for core::option::Option[@TraitClause0]}#5[@TraitClause0, @TraitClause1::parent_clause0] - fn other_method = test_crate::{impl test_crate::GenericTrait[@TraitClause0]> for test_crate::Override[@TraitClause0]}::other_method - fn provided = test_crate::{impl test_crate::GenericTrait[@TraitClause0]> for test_crate::Override[@TraitClause0]}::provided + fn other_method = test_crate::{impl test_crate::GenericTrait[@TraitClause0]> for test_crate::Override[@TraitClause0]}::other_method[@TraitClause0, @TraitClause1] + fn provided, [@TraitClause1]: core::cmp::PartialEq[@TraitClause0]>> = test_crate::{impl test_crate::GenericTrait[@TraitClause0]> for test_crate::Override[@TraitClause0]}::provided[@TraitClause0, @TraitClause1, @TraitClause0_0, @TraitClause0_1] } struct test_crate::NoOverride @@ -155,7 +155,7 @@ where { parent_clause0 = core::marker::Sized[@TraitClause0]> parent_clause1 = core::option::{impl core::clone::Clone for core::option::Option[@TraitClause0]}#5[@TraitClause0, @TraitClause1::parent_clause0] - fn other_method = test_crate::{impl test_crate::GenericTrait[@TraitClause0]> for test_crate::NoOverride[@TraitClause0]}#1::other_method + fn other_method = test_crate::{impl test_crate::GenericTrait[@TraitClause0]> for test_crate::NoOverride[@TraitClause0]}#1::other_method[@TraitClause0, @TraitClause1] } fn test_crate::GenericTrait::other_method() diff --git a/charon/tests/ui/issue-70-override-provided-method.out b/charon/tests/ui/issue-70-override-provided-method.out index 0b102a0b..85c5d2f1 100644 --- a/charon/tests/ui/issue-70-override-provided-method.out +++ b/charon/tests/ui/issue-70-override-provided-method.out @@ -12,8 +12,8 @@ enum core::option::Option trait core::cmp::PartialEq { - fn eq : core::cmp::PartialEq::eq - fn ne : core::cmp::PartialEq::ne + fn eq<'_0, '_1> = core::cmp::PartialEq::eq<'_0_0, '_0_1, Self, Rhs> + fn ne<'_0, '_1> = core::cmp::PartialEq::ne<'_0_0, '_0_1, Self, Rhs> } fn core::option::{impl core::cmp::PartialEq[@TraitClause0]> for core::option::Option[@TraitClause0]}#14::eq<'_0, '_1, T>(@1: &'_0 (core::option::Option[@TraitClause0]), @2: &'_1 (core::option::Option[@TraitClause0])) -> bool @@ -27,8 +27,8 @@ fn core::cmp::impls::{impl core::cmp::PartialEq for i32}#30::ne<'_0, '_1>(@ impl core::cmp::impls::{impl core::cmp::PartialEq for i32}#30 : core::cmp::PartialEq { - fn eq = core::cmp::impls::{impl core::cmp::PartialEq for i32}#30::eq - fn ne = core::cmp::impls::{impl core::cmp::PartialEq for i32}#30::ne + fn eq<'_0, '_1> = core::cmp::impls::{impl core::cmp::PartialEq for i32}#30::eq<'_0_0, '_0_1> + fn ne<'_0, '_1> = core::cmp::impls::{impl core::cmp::PartialEq for i32}#30::ne<'_0_0, '_0_1> } fn test_crate::main() @@ -85,7 +85,7 @@ fn test_crate::{impl core::cmp::PartialEq for test_crate::Foo}# impl test_crate::{impl core::cmp::PartialEq for test_crate::Foo}#1 : core::cmp::PartialEq { - fn eq = test_crate::{impl core::cmp::PartialEq for test_crate::Foo}#1::eq + fn eq<'_0, '_1> = test_crate::{impl core::cmp::PartialEq for test_crate::Foo}#1::eq<'_0_0, '_0_1> } enum core::cmp::Ordering = @@ -97,11 +97,11 @@ enum core::cmp::Ordering = trait core::cmp::PartialOrd { parent_clause0 : [@TraitClause0]: core::cmp::PartialEq - fn partial_cmp : core::cmp::PartialOrd::partial_cmp - fn lt : core::cmp::PartialOrd::lt - fn le : core::cmp::PartialOrd::le - fn gt : core::cmp::PartialOrd::gt - fn ge : core::cmp::PartialOrd::ge + fn partial_cmp<'_0, '_1> = core::cmp::PartialOrd::partial_cmp<'_0_0, '_0_1, Self, Rhs> + fn lt<'_0, '_1> = core::cmp::PartialOrd::lt<'_0_0, '_0_1, Self, Rhs> + fn le<'_0, '_1> = core::cmp::PartialOrd::le<'_0_0, '_0_1, Self, Rhs> + fn gt<'_0, '_1> = core::cmp::PartialOrd::gt<'_0_0, '_0_1, Self, Rhs> + fn ge<'_0, '_1> = core::cmp::PartialOrd::ge<'_0_0, '_0_1, Self, Rhs> } fn core::cmp::impls::{impl core::cmp::PartialOrd for u32}#64::partial_cmp<'_0, '_1>(@1: &'_0 (u32), @2: &'_1 (u32)) -> core::option::Option[core::marker::Sized] @@ -131,7 +131,7 @@ fn test_crate::{impl core::cmp::PartialOrd for test_crate::Foo} impl test_crate::{impl core::cmp::PartialOrd for test_crate::Foo}#2 : core::cmp::PartialOrd { parent_clause0 = test_crate::{impl core::cmp::PartialEq for test_crate::Foo}#1 - fn partial_cmp = test_crate::{impl core::cmp::PartialOrd for test_crate::Foo}#2::partial_cmp + fn partial_cmp<'_0, '_1> = test_crate::{impl core::cmp::PartialOrd for test_crate::Foo}#2::partial_cmp<'_0_0, '_0_1> } fn core::cmp::PartialEq::eq<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool @@ -141,7 +141,7 @@ where [@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::cmp::PartialEq, { - fn eq = core::option::{impl core::cmp::PartialEq[@TraitClause0]> for core::option::Option[@TraitClause0]}#14::eq + fn eq<'_0, '_1> = core::option::{impl core::cmp::PartialEq[@TraitClause0]> for core::option::Option[@TraitClause0]}#14::eq<'_0_0, '_0_1, T>[@TraitClause0, @TraitClause1] } fn core::cmp::PartialEq::ne<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool @@ -162,8 +162,8 @@ fn core::cmp::impls::{impl core::cmp::PartialEq for u32}#24::ne<'_0, '_1>(@ impl core::cmp::impls::{impl core::cmp::PartialEq for u32}#24 : core::cmp::PartialEq { - fn eq = core::cmp::impls::{impl core::cmp::PartialEq for u32}#24::eq - fn ne = core::cmp::impls::{impl core::cmp::PartialEq for u32}#24::ne + fn eq<'_0, '_1> = core::cmp::impls::{impl core::cmp::PartialEq for u32}#24::eq<'_0_0, '_0_1> + fn ne<'_0, '_1> = core::cmp::impls::{impl core::cmp::PartialEq for u32}#24::ne<'_0_0, '_0_1> } fn core::cmp::impls::{impl core::cmp::PartialOrd for u32}#64::lt<'_0, '_1>(@1: &'_0 (u32), @2: &'_1 (u32)) -> bool @@ -177,11 +177,11 @@ fn core::cmp::impls::{impl core::cmp::PartialOrd for u32}#64::ge<'_0, '_1>( impl core::cmp::impls::{impl core::cmp::PartialOrd for u32}#64 : core::cmp::PartialOrd { parent_clause0 = core::cmp::impls::{impl core::cmp::PartialEq for u32}#24 - fn partial_cmp = core::cmp::impls::{impl core::cmp::PartialOrd for u32}#64::partial_cmp - fn lt = core::cmp::impls::{impl core::cmp::PartialOrd for u32}#64::lt - fn le = core::cmp::impls::{impl core::cmp::PartialOrd for u32}#64::le - fn gt = core::cmp::impls::{impl core::cmp::PartialOrd for u32}#64::gt - fn ge = core::cmp::impls::{impl core::cmp::PartialOrd for u32}#64::ge + fn partial_cmp<'_0, '_1> = core::cmp::impls::{impl core::cmp::PartialOrd for u32}#64::partial_cmp<'_0_0, '_0_1> + fn lt<'_0, '_1> = core::cmp::impls::{impl core::cmp::PartialOrd for u32}#64::lt<'_0_0, '_0_1> + fn le<'_0, '_1> = core::cmp::impls::{impl core::cmp::PartialOrd for u32}#64::le<'_0_0, '_0_1> + fn gt<'_0, '_1> = core::cmp::impls::{impl core::cmp::PartialOrd for u32}#64::gt<'_0_0, '_0_1> + fn ge<'_0, '_1> = core::cmp::impls::{impl core::cmp::PartialOrd for u32}#64::ge<'_0_0, '_0_1> } diff --git a/charon/tests/ui/issue-72-hash-missing-impl.out b/charon/tests/ui/issue-72-hash-missing-impl.out index f9c1e477..d8dcbcf5 100644 --- a/charon/tests/ui/issue-72-hash-missing-impl.out +++ b/charon/tests/ui/issue-72-hash-missing-impl.out @@ -10,7 +10,7 @@ trait core::marker::Sized trait test_crate::Hash { - fn hash : test_crate::Hash::hash + fn hash<'_0, '_1, H, [@TraitClause0]: core::marker::Sized, [@TraitClause1]: test_crate::Hasher> = test_crate::Hash::hash<'_0_0, '_0_1, Self, H>[@TraitClause0_0, @TraitClause0_1] } fn test_crate::{impl test_crate::Hash for u32}#1::hash<'_0, '_1, H>(@1: &'_0 (u32), @2: &'_1 mut (H)) @@ -31,7 +31,7 @@ where impl test_crate::{impl test_crate::Hash for u32}#1 : test_crate::Hash { - fn hash = test_crate::{impl test_crate::Hash for u32}#1::hash + fn hash<'_0, '_1, H, [@TraitClause0]: core::marker::Sized, [@TraitClause1]: test_crate::Hasher> = test_crate::{impl test_crate::Hash for u32}#1::hash<'_0_0, '_0_1, H>[@TraitClause0_0, @TraitClause0_1] } fn test_crate::main() diff --git a/charon/tests/ui/issue-91-enum-to-discriminant-cast.out b/charon/tests/ui/issue-91-enum-to-discriminant-cast.out index f7481ec9..4d03c13b 100644 --- a/charon/tests/ui/issue-91-enum-to-discriminant-cast.out +++ b/charon/tests/ui/issue-91-enum-to-discriminant-cast.out @@ -10,8 +10,8 @@ trait core::marker::Sized trait core::clone::Clone { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn clone : core::clone::Clone::clone - fn clone_from : core::clone::Clone::clone_from + fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self> + fn clone_from<'_0, '_1> = core::clone::Clone::clone_from<'_0_0, '_0_1, Self> } trait core::marker::Copy @@ -31,7 +31,7 @@ fn test_crate::{impl core::clone::Clone for test_crate::Foo}#1::clone<'_0>(@1: & impl test_crate::{impl core::clone::Clone for test_crate::Foo}#1 : core::clone::Clone { parent_clause0 = core::marker::Sized - fn clone = test_crate::{impl core::clone::Clone for test_crate::Foo}#1::clone + fn clone<'_0> = test_crate::{impl core::clone::Clone for test_crate::Foo}#1::clone<'_0_0> } impl test_crate::{impl core::marker::Copy for test_crate::Foo} : core::marker::Copy diff --git a/charon/tests/ui/issue-94-recursive-trait-defns.out b/charon/tests/ui/issue-94-recursive-trait-defns.out index d8b2b435..d2d00b2b 100644 --- a/charon/tests/ui/issue-94-recursive-trait-defns.out +++ b/charon/tests/ui/issue-94-recursive-trait-defns.out @@ -53,13 +53,13 @@ trait test_crate::T6 { parent_clause0 : [@TraitClause0]: core::marker::Sized parent_clause1 : [@TraitClause1]: test_crate::T7 - fn f : test_crate::T6::f + fn f = test_crate::T6::f } trait test_crate::T7 { parent_clause0 : [@TraitClause0]: test_crate::T6 - fn g : test_crate::T7::g + fn g = test_crate::T7::g } fn test_crate::T7::g(@1: u64) diff --git a/charon/tests/ui/loops.out b/charon/tests/ui/loops.out index 4508eed8..6b9f1191 100644 --- a/charon/tests/ui/loops.out +++ b/charon/tests/ui/loops.out @@ -803,8 +803,8 @@ opaque type core::array::iter::IntoIter trait core::clone::Clone { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn clone : core::clone::Clone::clone - fn clone_from : core::clone::Clone::clone_from + fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self> + fn clone_from<'_0, '_1> = core::clone::Clone::clone_from<'_0_0, '_0_1, Self> } trait core::marker::Copy @@ -835,7 +835,7 @@ fn core::clone::impls::{impl core::clone::Clone for usize}#5::clone<'_0>(@1: &'_ impl core::clone::impls::{impl core::clone::Clone for usize}#5 : core::clone::Clone { parent_clause0 = core::marker::Sized - fn clone = core::clone::impls::{impl core::clone::Clone for usize}#5::clone + 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 @@ -852,7 +852,7 @@ fn core::num::nonzero::private::{impl core::clone::Clone for core::num::nonzero: 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 = core::num::nonzero::private::{impl core::clone::Clone for core::num::nonzero::private::NonZeroUsizeInner}#26::clone + 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 @@ -893,7 +893,7 @@ trait core::ops::function::FnOnce parent_clause1 : [@TraitClause1]: core::marker::Tuple parent_clause2 : [@TraitClause2]: core::marker::Sized type Output - fn call_once : core::ops::function::FnOnce::call_once + fn call_once = core::ops::function::FnOnce::call_once } trait core::ops::function::FnMut @@ -901,7 +901,7 @@ 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 : core::ops::function::FnMut::call_mut + fn call_mut<'_0> = core::ops::function::FnMut::call_mut<'_0_0, Self, Args> } opaque type core::iter::adapters::map::Map @@ -964,7 +964,7 @@ opaque type core::iter::adapters::inspect::Inspect trait core::ops::try_trait::FromResidual { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn from_residual : core::ops::try_trait::FromResidual::from_residual + fn from_residual = core::ops::try_trait::FromResidual::from_residual } enum core::ops::control_flow::ControlFlow @@ -983,8 +983,8 @@ trait core::ops::try_trait::Try parent_clause2 : [@TraitClause2]: core::marker::Sized type Output type Residual - fn from_output : core::ops::try_trait::Try::from_output - fn branch : core::ops::try_trait::Try::branch + fn from_output = core::ops::try_trait::Try::from_output + fn branch = core::ops::try_trait::Try::branch } trait core::ops::try_trait::Residual @@ -1002,19 +1002,19 @@ where trait core::default::Default { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn default : core::default::Default::default + fn default = core::default::Default::default } trait core::cmp::PartialEq { - fn eq : core::cmp::PartialEq::eq - fn ne : core::cmp::PartialEq::ne + fn eq<'_0, '_1> = core::cmp::PartialEq::eq<'_0_0, '_0_1, Self, Rhs> + fn ne<'_0, '_1> = core::cmp::PartialEq::ne<'_0_0, '_0_1, Self, Rhs> } trait core::cmp::Eq { parent_clause0 : [@TraitClause0]: core::cmp::PartialEq - fn assert_receiver_is_total_eq : core::cmp::Eq::assert_receiver_is_total_eq + fn assert_receiver_is_total_eq<'_0> = core::cmp::Eq::assert_receiver_is_total_eq<'_0_0, Self> } enum core::cmp::Ordering = @@ -1026,21 +1026,21 @@ enum core::cmp::Ordering = trait core::cmp::PartialOrd { parent_clause0 : [@TraitClause0]: core::cmp::PartialEq - fn partial_cmp : core::cmp::PartialOrd::partial_cmp - fn lt : core::cmp::PartialOrd::lt - fn le : core::cmp::PartialOrd::le - fn gt : core::cmp::PartialOrd::gt - fn ge : core::cmp::PartialOrd::ge + fn partial_cmp<'_0, '_1> = core::cmp::PartialOrd::partial_cmp<'_0_0, '_0_1, Self, Rhs> + fn lt<'_0, '_1> = core::cmp::PartialOrd::lt<'_0_0, '_0_1, Self, Rhs> + fn le<'_0, '_1> = core::cmp::PartialOrd::le<'_0_0, '_0_1, Self, Rhs> + fn gt<'_0, '_1> = core::cmp::PartialOrd::gt<'_0_0, '_0_1, Self, Rhs> + fn ge<'_0, '_1> = core::cmp::PartialOrd::ge<'_0_0, '_0_1, Self, Rhs> } trait core::cmp::Ord { parent_clause0 : [@TraitClause0]: core::cmp::Eq parent_clause1 : [@TraitClause1]: core::cmp::PartialOrd - fn cmp : core::cmp::Ord::cmp - fn max : core::cmp::Ord::max - fn min : core::cmp::Ord::min - fn clamp : core::cmp::Ord::clamp + fn cmp<'_0, '_1> = core::cmp::Ord::cmp<'_0_0, '_0_1, Self> + fn max<[@TraitClause0]: core::marker::Sized> = core::cmp::Ord::max[@TraitClause0_0] + fn min<[@TraitClause0]: core::marker::Sized> = core::cmp::Ord::min[@TraitClause0_0] + fn clamp<[@TraitClause0]: core::marker::Sized> = core::cmp::Ord::clamp[@TraitClause0_0] } opaque type core::iter::adapters::rev::Rev @@ -1063,83 +1063,83 @@ trait core::iter::traits::iterator::Iterator { parent_clause0 : [@TraitClause0]: core::marker::Sized type Item - fn next : core::iter::traits::iterator::Iterator::next - fn next_chunk : core::iter::traits::iterator::Iterator::next_chunk - fn size_hint : core::iter::traits::iterator::Iterator::size_hint - fn count : core::iter::traits::iterator::Iterator::count - fn last : core::iter::traits::iterator::Iterator::last - fn advance_by : core::iter::traits::iterator::Iterator::advance_by - fn nth : core::iter::traits::iterator::Iterator::nth - fn step_by : core::iter::traits::iterator::Iterator::step_by - fn chain : core::iter::traits::iterator::Iterator::chain - fn zip : core::iter::traits::iterator::Iterator::zip - fn intersperse : core::iter::traits::iterator::Iterator::intersperse - fn intersperse_with : core::iter::traits::iterator::Iterator::intersperse_with - fn map : core::iter::traits::iterator::Iterator::map - fn for_each : core::iter::traits::iterator::Iterator::for_each - fn filter : core::iter::traits::iterator::Iterator::filter - fn filter_map : core::iter::traits::iterator::Iterator::filter_map - fn enumerate : core::iter::traits::iterator::Iterator::enumerate - fn peekable : core::iter::traits::iterator::Iterator::peekable - fn skip_while : core::iter::traits::iterator::Iterator::skip_while - fn take_while : core::iter::traits::iterator::Iterator::take_while - fn map_while : core::iter::traits::iterator::Iterator::map_while - fn skip : core::iter::traits::iterator::Iterator::skip - fn take : core::iter::traits::iterator::Iterator::take - fn scan : core::iter::traits::iterator::Iterator::scan - fn flat_map : core::iter::traits::iterator::Iterator::flat_map - fn flatten : core::iter::traits::iterator::Iterator::flatten - fn map_windows : core::iter::traits::iterator::Iterator::map_windows - fn fuse : core::iter::traits::iterator::Iterator::fuse - fn inspect : core::iter::traits::iterator::Iterator::inspect - fn by_ref : core::iter::traits::iterator::Iterator::by_ref - fn collect : core::iter::traits::iterator::Iterator::collect - fn try_collect : core::iter::traits::iterator::Iterator::try_collect - fn collect_into : core::iter::traits::iterator::Iterator::collect_into - fn partition : core::iter::traits::iterator::Iterator::partition - fn partition_in_place : core::iter::traits::iterator::Iterator::partition_in_place - fn is_partitioned : core::iter::traits::iterator::Iterator::is_partitioned - fn try_fold : core::iter::traits::iterator::Iterator::try_fold - fn try_for_each : core::iter::traits::iterator::Iterator::try_for_each - fn fold : core::iter::traits::iterator::Iterator::fold - fn reduce : core::iter::traits::iterator::Iterator::reduce - fn try_reduce : core::iter::traits::iterator::Iterator::try_reduce - fn all : core::iter::traits::iterator::Iterator::all - fn any : core::iter::traits::iterator::Iterator::any - fn find : core::iter::traits::iterator::Iterator::find - fn find_map : core::iter::traits::iterator::Iterator::find_map - fn try_find : core::iter::traits::iterator::Iterator::try_find - fn position : core::iter::traits::iterator::Iterator::position - fn rposition : core::iter::traits::iterator::Iterator::rposition - fn max : core::iter::traits::iterator::Iterator::max - fn min : core::iter::traits::iterator::Iterator::min - fn max_by_key : core::iter::traits::iterator::Iterator::max_by_key - fn max_by : core::iter::traits::iterator::Iterator::max_by - fn min_by_key : core::iter::traits::iterator::Iterator::min_by_key - fn min_by : core::iter::traits::iterator::Iterator::min_by - fn rev : core::iter::traits::iterator::Iterator::rev - fn unzip : core::iter::traits::iterator::Iterator::unzip - fn copied : core::iter::traits::iterator::Iterator::copied - fn cloned : core::iter::traits::iterator::Iterator::cloned - fn cycle : core::iter::traits::iterator::Iterator::cycle - fn array_chunks : core::iter::traits::iterator::Iterator::array_chunks - fn sum : core::iter::traits::iterator::Iterator::sum - fn product : core::iter::traits::iterator::Iterator::product - fn cmp : core::iter::traits::iterator::Iterator::cmp - fn cmp_by : core::iter::traits::iterator::Iterator::cmp_by - fn partial_cmp : core::iter::traits::iterator::Iterator::partial_cmp - fn partial_cmp_by : core::iter::traits::iterator::Iterator::partial_cmp_by - fn eq : core::iter::traits::iterator::Iterator::eq - fn eq_by : core::iter::traits::iterator::Iterator::eq_by - fn ne : core::iter::traits::iterator::Iterator::ne - fn lt : core::iter::traits::iterator::Iterator::lt - fn le : core::iter::traits::iterator::Iterator::le - fn gt : core::iter::traits::iterator::Iterator::gt - fn ge : core::iter::traits::iterator::Iterator::ge - fn is_sorted : core::iter::traits::iterator::Iterator::is_sorted - fn is_sorted_by : core::iter::traits::iterator::Iterator::is_sorted_by - fn is_sorted_by_key : core::iter::traits::iterator::Iterator::is_sorted_by_key - fn __iterator_get_unchecked : core::iter::traits::iterator::Iterator::__iterator_get_unchecked + fn next<'_0> = core::iter::traits::iterator::Iterator::next<'_0_0, 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>[@TraitClause0_0] + fn size_hint<'_0> = core::iter::traits::iterator::Iterator::size_hint<'_0_0, Self> + fn count<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::count[@TraitClause0_0] + fn last<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::last[@TraitClause0_0] + fn advance_by<'_0> = core::iter::traits::iterator::Iterator::advance_by<'_0_0, Self> + fn nth<'_0> = core::iter::traits::iterator::Iterator::nth<'_0_0, Self> + fn step_by<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::step_by[@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[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn zip, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::iter::traits::collect::IntoIterator> = core::iter::traits::iterator::Iterator::zip[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn intersperse<[@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::clone::Clone> = core::iter::traits::iterator::Iterator::intersperse[@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[@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[@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[@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[@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[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn enumerate<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::enumerate[@TraitClause0_0] + fn peekable<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::peekable[@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[@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[@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[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn skip<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::skip[@TraitClause0_0] + fn take<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::take[@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[@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[@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[@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[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn fuse<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::fuse[@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[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn by_ref<'_0, [@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::by_ref<'_0_0, Self>[@TraitClause0_0] + fn collect, [@TraitClause1]: core::iter::traits::collect::FromIterator, [@TraitClause2]: core::marker::Sized> = core::iter::traits::iterator::Iterator::collect[@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>[@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>[@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[@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>[@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[@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>[@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>[@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[@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[@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>[@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>[@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>[@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>[@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>[@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>[@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>[@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>[@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[@TraitClause0_0, @TraitClause0_1] + fn min<[@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::cmp::Ord> = core::iter::traits::iterator::Iterator::min[@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[@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[@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[@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[@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[@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[@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>[@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>[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn cycle<[@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::clone::Clone> = core::iter::traits::iterator::Iterator::cycle[@TraitClause0_0, @TraitClause0_1] + fn array_chunks> = core::iter::traits::iterator::Iterator::array_chunks[@TraitClause0_0] + fn sum, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::iter::traits::accum::Sum> = core::iter::traits::iterator::Iterator::sum[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn product, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::iter::traits::accum::Product> = core::iter::traits::iterator::Iterator::product[@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[@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[@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[@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[@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[@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[@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[@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[@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[@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[@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[@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[@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[@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[@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>[@TraitClause0_0] } trait core::iter::traits::collect::IntoIterator @@ -1151,7 +1151,7 @@ where parent_clause2 : [@TraitClause2]: core::marker::Sized type Item type IntoIter - fn into_iter : core::iter::traits::collect::IntoIterator::into_iter + fn into_iter = core::iter::traits::collect::IntoIterator::into_iter } opaque type core::iter::adapters::intersperse::Intersperse @@ -1194,34 +1194,34 @@ trait core::iter::traits::collect::FromIterator { parent_clause0 : [@TraitClause0]: core::marker::Sized parent_clause1 : [@TraitClause1]: core::marker::Sized - fn from_iter : core::iter::traits::collect::FromIterator::from_iter + fn from_iter, [@TraitClause1]: core::iter::traits::collect::IntoIterator, @TraitClause1_1::Item = A> = core::iter::traits::collect::FromIterator::from_iter[@TraitClause0_0, @TraitClause0_1] } trait core::iter::traits::collect::Extend { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn extend : core::iter::traits::collect::Extend::extend - fn extend_one : core::iter::traits::collect::Extend::extend_one - fn extend_reserve : core::iter::traits::collect::Extend::extend_reserve - fn extend_one_unchecked : core::iter::traits::collect::Extend::extend_one_unchecked + 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>[@TraitClause0_0, @TraitClause0_1] + fn extend_one<'_0> = core::iter::traits::collect::Extend::extend_one<'_0_0, Self, A> + fn extend_reserve<'_0> = core::iter::traits::collect::Extend::extend_reserve<'_0_0, Self, A> + fn extend_one_unchecked<'_0, [@TraitClause0]: core::marker::Sized> = core::iter::traits::collect::Extend::extend_one_unchecked<'_0_0, Self, A>[@TraitClause0_0] } trait core::iter::traits::double_ended::DoubleEndedIterator { parent_clause0 : [@TraitClause0]: core::iter::traits::iterator::Iterator - fn next_back : core::iter::traits::double_ended::DoubleEndedIterator::next_back - fn advance_back_by : core::iter::traits::double_ended::DoubleEndedIterator::advance_back_by - fn nth_back : core::iter::traits::double_ended::DoubleEndedIterator::nth_back - fn try_rfold : core::iter::traits::double_ended::DoubleEndedIterator::try_rfold - fn rfold : core::iter::traits::double_ended::DoubleEndedIterator::rfold - fn rfind : core::iter::traits::double_ended::DoubleEndedIterator::rfind + fn next_back<'_0> = core::iter::traits::double_ended::DoubleEndedIterator::next_back<'_0_0, Self> + fn advance_back_by<'_0> = core::iter::traits::double_ended::DoubleEndedIterator::advance_back_by<'_0_0, Self> + fn nth_back<'_0> = core::iter::traits::double_ended::DoubleEndedIterator::nth_back<'_0_0, 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>[@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[@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>[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2] } trait core::iter::traits::exact_size::ExactSizeIterator { parent_clause0 : [@TraitClause0]: core::iter::traits::iterator::Iterator - fn len : core::iter::traits::exact_size::ExactSizeIterator::len - fn is_empty : core::iter::traits::exact_size::ExactSizeIterator::is_empty + fn len<'_0> = core::iter::traits::exact_size::ExactSizeIterator::len<'_0_0, Self> + fn is_empty<'_0> = core::iter::traits::exact_size::ExactSizeIterator::is_empty<'_0_0, Self> } opaque type core::iter::adapters::array_chunks::ArrayChunks @@ -1233,21 +1233,21 @@ trait core::iter::traits::accum::Sum { parent_clause0 : [@TraitClause0]: core::marker::Sized parent_clause1 : [@TraitClause1]: core::marker::Sized - fn sum : core::iter::traits::accum::Sum::sum + fn sum, [@TraitClause1]: core::iter::traits::iterator::Iterator, @TraitClause1_1::Item = A> = core::iter::traits::accum::Sum::sum[@TraitClause0_0, @TraitClause0_1] } trait core::iter::traits::accum::Product { parent_clause0 : [@TraitClause0]: core::marker::Sized parent_clause1 : [@TraitClause1]: core::marker::Sized - fn product : core::iter::traits::accum::Product::product + fn product, [@TraitClause1]: core::iter::traits::iterator::Iterator, @TraitClause1_1::Item = A> = core::iter::traits::accum::Product::product[@TraitClause0_0, @TraitClause0_1] } trait core::iter::adapters::zip::TrustedRandomAccessNoCoerce { parent_clause0 : [@TraitClause0]: core::marker::Sized const MAY_HAVE_SIDE_EFFECT : bool - fn size : core::iter::adapters::zip::TrustedRandomAccessNoCoerce::size + fn size<'_0, [@TraitClause0]: core::iter::traits::iterator::Iterator> = core::iter::adapters::zip::TrustedRandomAccessNoCoerce::size<'_0_0, Self>[@TraitClause0_0] } fn core::iter::traits::collect::{impl core::iter::traits::collect::IntoIterator for I}#1::into_iter(@1: I) -> I @@ -1260,13 +1260,13 @@ trait core::iter::range::Step parent_clause0 : [@TraitClause0]: core::marker::Sized parent_clause1 : [@TraitClause1]: core::clone::Clone parent_clause2 : [@TraitClause2]: core::cmp::PartialOrd - fn steps_between : core::iter::range::Step::steps_between - fn forward_checked : core::iter::range::Step::forward_checked - fn backward_checked : core::iter::range::Step::backward_checked - fn forward : core::iter::range::Step::forward - fn forward_unchecked : core::iter::range::Step::forward_unchecked - fn backward : core::iter::range::Step::backward - fn backward_unchecked : core::iter::range::Step::backward_unchecked + fn steps_between<'_0, '_1> = core::iter::range::Step::steps_between<'_0_0, '_0_1, Self> + fn forward_checked = core::iter::range::Step::forward_checked + fn backward_checked = core::iter::range::Step::backward_checked + fn forward = core::iter::range::Step::forward + fn forward_unchecked = core::iter::range::Step::forward_unchecked + fn backward = core::iter::range::Step::backward + fn backward_unchecked = core::iter::range::Step::backward_unchecked } fn core::iter::range::{impl core::iter::traits::iterator::Iterator for core::ops::range::Range[@TraitClause0]}#6::next<'_0, A>(@1: &'_0 mut (core::ops::range::Range[@TraitClause0])) -> core::option::Option[@TraitClause0] @@ -1329,16 +1329,16 @@ where { parent_clause0 = @TraitClause0 type Item = A - fn next = core::iter::range::{impl core::iter::traits::iterator::Iterator for core::ops::range::Range[@TraitClause0]}#6::next - fn size_hint = core::iter::range::{impl core::iter::traits::iterator::Iterator for core::ops::range::Range[@TraitClause0]}#6::size_hint - fn count = core::iter::range::{impl core::iter::traits::iterator::Iterator for core::ops::range::Range[@TraitClause0]}#6::count - fn last = core::iter::range::{impl core::iter::traits::iterator::Iterator for core::ops::range::Range[@TraitClause0]}#6::last - fn advance_by = core::iter::range::{impl core::iter::traits::iterator::Iterator for core::ops::range::Range[@TraitClause0]}#6::advance_by - fn nth = core::iter::range::{impl core::iter::traits::iterator::Iterator for core::ops::range::Range[@TraitClause0]}#6::nth - fn max = core::iter::range::{impl core::iter::traits::iterator::Iterator for core::ops::range::Range[@TraitClause0]}#6::max - fn min = core::iter::range::{impl core::iter::traits::iterator::Iterator for core::ops::range::Range[@TraitClause0]}#6::min - fn is_sorted = core::iter::range::{impl core::iter::traits::iterator::Iterator for core::ops::range::Range[@TraitClause0]}#6::is_sorted - fn __iterator_get_unchecked = core::iter::range::{impl core::iter::traits::iterator::Iterator for core::ops::range::Range[@TraitClause0]}#6::__iterator_get_unchecked + fn next<'_0> = core::iter::range::{impl core::iter::traits::iterator::Iterator for core::ops::range::Range[@TraitClause0]}#6::next<'_0_0, A>[@TraitClause0, @TraitClause1] + fn size_hint<'_0> = core::iter::range::{impl core::iter::traits::iterator::Iterator for core::ops::range::Range[@TraitClause0]}#6::size_hint<'_0_0, A>[@TraitClause0, @TraitClause1] + fn count = core::iter::range::{impl core::iter::traits::iterator::Iterator for core::ops::range::Range[@TraitClause0]}#6::count[@TraitClause0, @TraitClause1] + fn last = core::iter::range::{impl core::iter::traits::iterator::Iterator for core::ops::range::Range[@TraitClause0]}#6::last[@TraitClause0, @TraitClause1] + fn advance_by<'_0> = core::iter::range::{impl core::iter::traits::iterator::Iterator for core::ops::range::Range[@TraitClause0]}#6::advance_by<'_0_0, A>[@TraitClause0, @TraitClause1] + fn nth<'_0> = core::iter::range::{impl core::iter::traits::iterator::Iterator for core::ops::range::Range[@TraitClause0]}#6::nth<'_0_0, A>[@TraitClause0, @TraitClause1] + fn max<[@TraitClause0]: core::cmp::Ord> = core::iter::range::{impl core::iter::traits::iterator::Iterator for core::ops::range::Range[@TraitClause0]}#6::max[@TraitClause0, @TraitClause1, @TraitClause0_0] + fn min<[@TraitClause0]: core::cmp::Ord> = core::iter::range::{impl core::iter::traits::iterator::Iterator for core::ops::range::Range[@TraitClause0]}#6::min[@TraitClause0, @TraitClause1, @TraitClause0_0] + fn is_sorted = core::iter::range::{impl core::iter::traits::iterator::Iterator for core::ops::range::Range[@TraitClause0]}#6::is_sorted[@TraitClause0, @TraitClause1] + fn __iterator_get_unchecked<'_0, [@TraitClause0]: core::iter::adapters::zip::TrustedRandomAccessNoCoerce[@TraitClause0]>> = core::iter::range::{impl core::iter::traits::iterator::Iterator for core::ops::range::Range[@TraitClause0]}#6::__iterator_get_unchecked<'_0_0, A>[@TraitClause0, @TraitClause1, @TraitClause0_0] } fn core::clone::impls::{impl core::clone::Clone for i32}#14::clone<'_0>(@1: &'_0 (i32)) -> i32 @@ -1346,7 +1346,7 @@ fn core::clone::impls::{impl core::clone::Clone for i32}#14::clone<'_0>(@1: &'_0 impl core::clone::impls::{impl core::clone::Clone for i32}#14 : core::clone::Clone { parent_clause0 = core::marker::Sized - fn clone = core::clone::impls::{impl core::clone::Clone for i32}#14::clone + fn clone<'_0> = core::clone::impls::{impl core::clone::Clone for i32}#14::clone<'_0_0> } fn core::cmp::impls::{impl core::cmp::PartialEq for i32}#30::eq<'_0, '_1>(@1: &'_0 (i32), @2: &'_1 (i32)) -> bool @@ -1355,8 +1355,8 @@ fn core::cmp::impls::{impl core::cmp::PartialEq for i32}#30::ne<'_0, '_1>(@ impl core::cmp::impls::{impl core::cmp::PartialEq for i32}#30 : core::cmp::PartialEq { - fn eq = core::cmp::impls::{impl core::cmp::PartialEq for i32}#30::eq - fn ne = core::cmp::impls::{impl core::cmp::PartialEq for i32}#30::ne + fn eq<'_0, '_1> = core::cmp::impls::{impl core::cmp::PartialEq for i32}#30::eq<'_0_0, '_0_1> + fn ne<'_0, '_1> = core::cmp::impls::{impl core::cmp::PartialEq for i32}#30::ne<'_0_0, '_0_1> } fn core::cmp::impls::{impl core::cmp::PartialOrd for i32}#76::partial_cmp<'_0, '_1>(@1: &'_0 (i32), @2: &'_1 (i32)) -> core::option::Option[core::marker::Sized] @@ -1372,11 +1372,11 @@ fn core::cmp::impls::{impl core::cmp::PartialOrd for i32}#76::ge<'_0, '_1>( impl core::cmp::impls::{impl core::cmp::PartialOrd for i32}#76 : core::cmp::PartialOrd { parent_clause0 = core::cmp::impls::{impl core::cmp::PartialEq for i32}#30 - fn partial_cmp = core::cmp::impls::{impl core::cmp::PartialOrd for i32}#76::partial_cmp - fn lt = core::cmp::impls::{impl core::cmp::PartialOrd for i32}#76::lt - fn le = core::cmp::impls::{impl core::cmp::PartialOrd for i32}#76::le - fn gt = core::cmp::impls::{impl core::cmp::PartialOrd for i32}#76::gt - fn ge = core::cmp::impls::{impl core::cmp::PartialOrd for i32}#76::ge + fn partial_cmp<'_0, '_1> = core::cmp::impls::{impl core::cmp::PartialOrd for i32}#76::partial_cmp<'_0_0, '_0_1> + fn lt<'_0, '_1> = core::cmp::impls::{impl core::cmp::PartialOrd for i32}#76::lt<'_0_0, '_0_1> + fn le<'_0, '_1> = core::cmp::impls::{impl core::cmp::PartialOrd for i32}#76::le<'_0_0, '_0_1> + fn gt<'_0, '_1> = core::cmp::impls::{impl core::cmp::PartialOrd for i32}#76::gt<'_0_0, '_0_1> + fn ge<'_0, '_1> = core::cmp::impls::{impl core::cmp::PartialOrd for i32}#76::ge<'_0_0, '_0_1> } fn core::iter::range::{impl core::iter::range::Step for i32}#40::steps_between<'_0, '_1>(@1: &'_0 (i32), @2: &'_1 (i32)) -> core::option::Option[core::marker::Sized] @@ -1398,7 +1398,7 @@ impl core::iter::range::{impl core::iter::range::Step for i32}#40 : core::iter:: parent_clause0 = core::marker::Sized parent_clause1 = core::clone::impls::{impl core::clone::Clone for i32}#14 parent_clause2 = core::cmp::impls::{impl core::cmp::PartialOrd for i32}#76 - fn steps_between = core::iter::range::{impl core::iter::range::Step for i32}#40::steps_between + fn steps_between<'_0, '_1> = core::iter::range::{impl core::iter::range::Step for i32}#40::steps_between<'_0_0, '_0_1> fn forward_checked = core::iter::range::{impl core::iter::range::Step for i32}#40::forward_checked fn backward_checked = core::iter::range::{impl core::iter::range::Step for i32}#40::backward_checked fn forward = core::iter::range::{impl core::iter::range::Step for i32}#40::forward @@ -1413,8 +1413,8 @@ fn core::cmp::impls::{impl core::cmp::PartialEq for usize}#21::ne<'_0, '_ impl core::cmp::impls::{impl core::cmp::PartialEq for usize}#21 : core::cmp::PartialEq { - fn eq = core::cmp::impls::{impl core::cmp::PartialEq for usize}#21::eq - fn ne = core::cmp::impls::{impl core::cmp::PartialEq for usize}#21::ne + fn eq<'_0, '_1> = core::cmp::impls::{impl core::cmp::PartialEq for usize}#21::eq<'_0_0, '_0_1> + fn ne<'_0, '_1> = core::cmp::impls::{impl core::cmp::PartialEq for usize}#21::ne<'_0_0, '_0_1> } fn core::cmp::impls::{impl core::cmp::PartialOrd for usize}#58::partial_cmp<'_0, '_1>(@1: &'_0 (usize), @2: &'_1 (usize)) -> core::option::Option[core::marker::Sized] @@ -1430,11 +1430,11 @@ fn core::cmp::impls::{impl core::cmp::PartialOrd for usize}#58::ge<'_0, ' impl core::cmp::impls::{impl core::cmp::PartialOrd for usize}#58 : core::cmp::PartialOrd { parent_clause0 = core::cmp::impls::{impl core::cmp::PartialEq for usize}#21 - fn partial_cmp = core::cmp::impls::{impl core::cmp::PartialOrd for usize}#58::partial_cmp - fn lt = core::cmp::impls::{impl core::cmp::PartialOrd for usize}#58::lt - fn le = core::cmp::impls::{impl core::cmp::PartialOrd for usize}#58::le - fn gt = core::cmp::impls::{impl core::cmp::PartialOrd for usize}#58::gt - fn ge = core::cmp::impls::{impl core::cmp::PartialOrd for usize}#58::ge + fn partial_cmp<'_0, '_1> = core::cmp::impls::{impl core::cmp::PartialOrd for usize}#58::partial_cmp<'_0_0, '_0_1> + fn lt<'_0, '_1> = core::cmp::impls::{impl core::cmp::PartialOrd for usize}#58::lt<'_0_0, '_0_1> + fn le<'_0, '_1> = core::cmp::impls::{impl core::cmp::PartialOrd for usize}#58::le<'_0_0, '_0_1> + fn gt<'_0, '_1> = core::cmp::impls::{impl core::cmp::PartialOrd for usize}#58::gt<'_0_0, '_0_1> + fn ge<'_0, '_1> = core::cmp::impls::{impl core::cmp::PartialOrd for usize}#58::ge<'_0_0, '_0_1> } fn core::iter::range::{impl core::iter::range::Step for usize}#43::steps_between<'_0, '_1>(@1: &'_0 (usize), @2: &'_1 (usize)) -> core::option::Option[core::marker::Sized] @@ -1456,7 +1456,7 @@ impl core::iter::range::{impl core::iter::range::Step for usize}#43 : core::iter parent_clause0 = core::marker::Sized parent_clause1 = core::clone::impls::{impl core::clone::Clone for usize}#5 parent_clause2 = core::cmp::impls::{impl core::cmp::PartialOrd for usize}#58 - fn steps_between = core::iter::range::{impl core::iter::range::Step for usize}#43::steps_between + fn steps_between<'_0, '_1> = core::iter::range::{impl core::iter::range::Step for usize}#43::steps_between<'_0_0, '_0_1> fn forward_checked = core::iter::range::{impl core::iter::range::Step for usize}#43::forward_checked fn backward_checked = core::iter::range::{impl core::iter::range::Step for usize}#43::backward_checked fn forward = core::iter::range::{impl core::iter::range::Step for usize}#43::forward @@ -1626,7 +1626,7 @@ fn core::clone::impls::{impl core::clone::Clone for u32}#8::clone<'_0>(@1: &'_0 impl core::clone::impls::{impl core::clone::Clone for u32}#8 : core::clone::Clone { parent_clause0 = core::marker::Sized - fn clone = core::clone::impls::{impl core::clone::Clone for u32}#8::clone + fn clone<'_0> = core::clone::impls::{impl core::clone::Clone for u32}#8::clone<'_0_0> } fn core::cmp::impls::{impl core::cmp::PartialEq for u32}#24::eq<'_0, '_1>(@1: &'_0 (u32), @2: &'_1 (u32)) -> bool @@ -1635,8 +1635,8 @@ fn core::cmp::impls::{impl core::cmp::PartialEq for u32}#24::ne<'_0, '_1>(@ impl core::cmp::impls::{impl core::cmp::PartialEq for u32}#24 : core::cmp::PartialEq { - fn eq = core::cmp::impls::{impl core::cmp::PartialEq for u32}#24::eq - fn ne = core::cmp::impls::{impl core::cmp::PartialEq for u32}#24::ne + fn eq<'_0, '_1> = core::cmp::impls::{impl core::cmp::PartialEq for u32}#24::eq<'_0_0, '_0_1> + fn ne<'_0, '_1> = core::cmp::impls::{impl core::cmp::PartialEq for u32}#24::ne<'_0_0, '_0_1> } fn core::cmp::impls::{impl core::cmp::PartialOrd for u32}#64::partial_cmp<'_0, '_1>(@1: &'_0 (u32), @2: &'_1 (u32)) -> core::option::Option[core::marker::Sized] @@ -1652,11 +1652,11 @@ fn core::cmp::impls::{impl core::cmp::PartialOrd for u32}#64::ge<'_0, '_1>( impl core::cmp::impls::{impl core::cmp::PartialOrd for u32}#64 : core::cmp::PartialOrd { parent_clause0 = core::cmp::impls::{impl core::cmp::PartialEq for u32}#24 - fn partial_cmp = core::cmp::impls::{impl core::cmp::PartialOrd for u32}#64::partial_cmp - fn lt = core::cmp::impls::{impl core::cmp::PartialOrd for u32}#64::lt - fn le = core::cmp::impls::{impl core::cmp::PartialOrd for u32}#64::le - fn gt = core::cmp::impls::{impl core::cmp::PartialOrd for u32}#64::gt - fn ge = core::cmp::impls::{impl core::cmp::PartialOrd for u32}#64::ge + fn partial_cmp<'_0, '_1> = core::cmp::impls::{impl core::cmp::PartialOrd for u32}#64::partial_cmp<'_0_0, '_0_1> + fn lt<'_0, '_1> = core::cmp::impls::{impl core::cmp::PartialOrd for u32}#64::lt<'_0_0, '_0_1> + fn le<'_0, '_1> = core::cmp::impls::{impl core::cmp::PartialOrd for u32}#64::le<'_0_0, '_0_1> + fn gt<'_0, '_1> = core::cmp::impls::{impl core::cmp::PartialOrd for u32}#64::gt<'_0_0, '_0_1> + fn ge<'_0, '_1> = core::cmp::impls::{impl core::cmp::PartialOrd for u32}#64::ge<'_0_0, '_0_1> } fn core::iter::range::{impl core::iter::range::Step for u32}#39::steps_between<'_0, '_1>(@1: &'_0 (u32), @2: &'_1 (u32)) -> core::option::Option[core::marker::Sized] @@ -1678,7 +1678,7 @@ impl core::iter::range::{impl core::iter::range::Step for u32}#39 : core::iter:: parent_clause0 = core::marker::Sized parent_clause1 = core::clone::impls::{impl core::clone::Clone for u32}#8 parent_clause2 = core::cmp::impls::{impl core::cmp::PartialOrd for u32}#64 - fn steps_between = core::iter::range::{impl core::iter::range::Step for u32}#39::steps_between + fn steps_between<'_0, '_1> = core::iter::range::{impl core::iter::range::Step for u32}#39::steps_between<'_0_0, '_0_1> fn forward_checked = core::iter::range::{impl core::iter::range::Step for u32}#39::forward_checked fn backward_checked = core::iter::range::{impl core::iter::range::Step for u32}#39::backward_checked fn forward = core::iter::range::{impl core::iter::range::Step for u32}#39::forward @@ -1894,18 +1894,18 @@ trait core::slice::index::SliceIndex { parent_clause0 : [@TraitClause0]: core::slice::index::private_slice_index::Sealed type Output - fn get : core::slice::index::SliceIndex::get - fn get_mut : core::slice::index::SliceIndex::get_mut - fn get_unchecked : core::slice::index::SliceIndex::get_unchecked - fn get_unchecked_mut : core::slice::index::SliceIndex::get_unchecked_mut - fn index : core::slice::index::SliceIndex::index - fn index_mut : core::slice::index::SliceIndex::index_mut + fn get<'_0> = core::slice::index::SliceIndex::get<'_0_0, Self, T> + fn get_mut<'_0> = core::slice::index::SliceIndex::get_mut<'_0_0, Self, T> + fn get_unchecked = core::slice::index::SliceIndex::get_unchecked + fn get_unchecked_mut = core::slice::index::SliceIndex::get_unchecked_mut + fn index<'_0> = core::slice::index::SliceIndex::index<'_0_0, Self, T> + fn index_mut<'_0> = core::slice::index::SliceIndex::index_mut<'_0_0, Self, T> } trait core::ops::index::Index { type Output - fn index : core::ops::index::Index::index + fn index<'_0> = core::ops::index::Index::index<'_0_0, Self, Idx> } fn alloc::vec::{impl core::ops::index::Index for alloc::vec::Vec[@TraitClause0, @TraitClause2]}#13::index<'_0, T, I, A>(@1: &'_0 (alloc::vec::Vec[@TraitClause0, @TraitClause2]), @2: I) -> &'_0 (alloc::vec::{impl core::ops::index::Index for alloc::vec::Vec[@TraitClause0, @TraitClause2]}#13[@TraitClause0, @TraitClause1, @TraitClause2, @TraitClause3]::Output) @@ -1923,7 +1923,7 @@ where [@TraitClause3]: core::slice::index::SliceIndex>, { type Output = @TraitClause3::Output - fn index = alloc::vec::{impl core::ops::index::Index for alloc::vec::Vec[@TraitClause0, @TraitClause2]}#13::index + fn index<'_0> = alloc::vec::{impl core::ops::index::Index for alloc::vec::Vec[@TraitClause0, @TraitClause2]}#13::index<'_0_0, T, I, A>[@TraitClause0, @TraitClause1, @TraitClause2, @TraitClause3] } fn alloc::vec::{impl core::ops::index::IndexMut for alloc::vec::Vec[@TraitClause0, @TraitClause2]}#14::index_mut<'_0, T, I, A>(@1: &'_0 mut (alloc::vec::Vec[@TraitClause0, @TraitClause2]), @2: I) -> &'_0 mut (alloc::vec::{impl core::ops::index::Index for alloc::vec::Vec[@TraitClause0, @TraitClause2]}#13[@TraitClause0, @TraitClause1, @TraitClause2, @TraitClause3]::Output) @@ -1965,12 +1965,12 @@ where { parent_clause0 = core::slice::index::private_slice_index::{impl core::slice::index::private_slice_index::Sealed for usize} type Output = T - fn get = core::slice::index::{impl core::slice::index::SliceIndex> for usize}#2::get - fn get_mut = core::slice::index::{impl core::slice::index::SliceIndex> for usize}#2::get_mut - fn get_unchecked = core::slice::index::{impl core::slice::index::SliceIndex> for usize}#2::get_unchecked - fn get_unchecked_mut = core::slice::index::{impl core::slice::index::SliceIndex> for usize}#2::get_unchecked_mut - fn index = core::slice::index::{impl core::slice::index::SliceIndex> for usize}#2::index - fn index_mut = core::slice::index::{impl core::slice::index::SliceIndex> for usize}#2::index_mut + fn get<'_0> = core::slice::index::{impl core::slice::index::SliceIndex> for usize}#2::get<'_0_0, T>[@TraitClause0] + fn get_mut<'_0> = core::slice::index::{impl core::slice::index::SliceIndex> for usize}#2::get_mut<'_0_0, T>[@TraitClause0] + fn get_unchecked = core::slice::index::{impl core::slice::index::SliceIndex> for usize}#2::get_unchecked[@TraitClause0] + fn get_unchecked_mut = core::slice::index::{impl core::slice::index::SliceIndex> for usize}#2::get_unchecked_mut[@TraitClause0] + fn index<'_0> = core::slice::index::{impl core::slice::index::SliceIndex> for usize}#2::index<'_0_0, T>[@TraitClause0] + fn index_mut<'_0> = core::slice::index::{impl core::slice::index::SliceIndex> for usize}#2::index_mut<'_0_0, T>[@TraitClause0] } fn test_crate::clear<'_0>(@1: &'_0 mut (alloc::vec::Vec[core::marker::Sized, core::marker::Sized])) @@ -2162,7 +2162,7 @@ where 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 + 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[Self::parent_clause0] @@ -2172,7 +2172,7 @@ fn core::ops::index::IndexMut::index_mut<'_0, Self, Idx>(@1: &'_0 mut (Self), @2 trait core::ops::index::IndexMut { parent_clause0 : [@TraitClause0]: core::ops::index::Index - fn index_mut : core::ops::index::IndexMut::index_mut + fn index_mut<'_0> = core::ops::index::IndexMut::index_mut<'_0_0, Self, Idx> } impl alloc::vec::{impl core::ops::index::IndexMut for alloc::vec::Vec[@TraitClause0, @TraitClause2]}#14 : core::ops::index::IndexMut[@TraitClause0, @TraitClause2], I> @@ -2183,7 +2183,7 @@ where [@TraitClause3]: core::slice::index::SliceIndex>, { parent_clause0 = alloc::vec::{impl core::ops::index::Index for alloc::vec::Vec[@TraitClause0, @TraitClause2]}#13[@TraitClause0, @TraitClause1, @TraitClause2, @TraitClause3] - fn index_mut = alloc::vec::{impl core::ops::index::IndexMut for alloc::vec::Vec[@TraitClause0, @TraitClause2]}#14::index_mut + fn index_mut<'_0> = alloc::vec::{impl core::ops::index::IndexMut for alloc::vec::Vec[@TraitClause0, @TraitClause2]}#14::index_mut<'_0_0, T, I, A>[@TraitClause0, @TraitClause1, @TraitClause2, @TraitClause3] } fn core::iter::range::Step::steps_between<'_0, '_1, Self>(@1: &'_0 (Self), @2: &'_1 (Self)) -> core::option::Option[core::marker::Sized] @@ -2759,22 +2759,36 @@ unsafe fn core::iter::traits::iterator::Iterator::__iterator_get_unchecked<'_0, where [@TraitClause0]: core::iter::adapters::zip::TrustedRandomAccessNoCoerce, +fn core::default::Default::default() -> Self + fn core::ops::function::FnMut::call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> Self::parent_clause0::Output fn core::ops::function::FnOnce::call_once(@1: Self, @2: Args) -> Self::Output -fn core::iter::traits::collect::FromIterator::from_iter(@1: T) -> Self -where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::iter::traits::collect::IntoIterator, - @TraitClause1::Item = A, - fn core::ops::try_trait::Try::from_output(@1: Self::Output) -> Self fn core::ops::try_trait::Try::branch(@1: Self) -> core::ops::control_flow::ControlFlow[Self::parent_clause0::parent_clause0, Self::parent_clause1] fn core::ops::try_trait::FromResidual::from_residual(@1: R) -> Self +fn core::iter::traits::accum::Sum::sum(@1: I) -> Self +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::iter::traits::iterator::Iterator, + @TraitClause1::Item = A, + +fn core::iter::traits::accum::Product::product(@1: I) -> Self +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::iter::traits::iterator::Iterator, + @TraitClause1::Item = A, + +fn core::iter::traits::collect::FromIterator::from_iter(@1: T) -> Self +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::iter::traits::collect::IntoIterator, + @TraitClause1::Item = A, + fn core::iter::traits::collect::Extend::extend<'_0, Self, A, T>(@1: &'_0 mut (Self), @2: T) where [@TraitClause0]: core::marker::Sized, @@ -2789,8 +2803,6 @@ unsafe fn core::iter::traits::collect::Extend::extend_one_unchecked<'_0, Self, A where [@TraitClause0]: core::marker::Sized, -fn core::default::Default::default() -> Self - fn core::iter::traits::double_ended::DoubleEndedIterator::next_back<'_0, Self>(@1: &'_0 mut (Self)) -> core::option::Option[Self::parent_clause0::parent_clause0] 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]>] @@ -2827,18 +2839,6 @@ fn core::iter::traits::exact_size::ExactSizeIterator::len<'_0, Self>(@1: &'_0 (S fn core::iter::traits::exact_size::ExactSizeIterator::is_empty<'_0, Self>(@1: &'_0 (Self)) -> bool -fn core::iter::traits::accum::Sum::sum(@1: I) -> Self -where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::iter::traits::iterator::Iterator, - @TraitClause1::Item = A, - -fn core::iter::traits::accum::Product::product(@1: I) -> Self -where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::iter::traits::iterator::Iterator, - @TraitClause1::Item = A, - fn core::slice::index::SliceIndex::get<'_0, Self, T>(@1: Self, @2: &'_0 (T)) -> core::option::Option<&'_0 (Self::Output)>[core::marker::Sized<&'_0 (Self::Output)>] fn core::slice::index::SliceIndex::get_mut<'_0, Self, T>(@1: Self, @2: &'_0 mut (T)) -> core::option::Option<&'_0 mut (Self::Output)>[core::marker::Sized<&'_0 mut (Self::Output)>] diff --git a/charon/tests/ui/method-impl-generalization.out b/charon/tests/ui/method-impl-generalization.out index 9287e354..563d70a7 100644 --- a/charon/tests/ui/method-impl-generalization.out +++ b/charon/tests/ui/method-impl-generalization.out @@ -5,8 +5,8 @@ trait core::marker::Sized trait core::clone::Clone { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn clone : core::clone::Clone::clone - fn clone_from : core::clone::Clone::clone_from + fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self> + fn clone_from<'_0, '_1> = core::clone::Clone::clone_from<'_0_0, '_0_1, Self> } trait core::marker::Copy @@ -17,8 +17,8 @@ trait core::marker::Copy trait test_crate::Trait { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn method1 : test_crate::Trait::method1 - fn method2 : test_crate::Trait::method2 + fn method1 = test_crate::Trait::method1 + fn method2, [@TraitClause1]: core::marker::Copy> = test_crate::Trait::method2[@TraitClause0_0, @TraitClause0_1] } fn test_crate::{impl test_crate::Trait for ()}::method1(@1: (), @2: &'static (u32)) -> bool @@ -51,14 +51,14 @@ impl test_crate::{impl test_crate::Trait for ()} : test_crate::Trait<()> { parent_clause0 = core::marker::Sized<()> fn method1 = test_crate::{impl test_crate::Trait for ()}::method1 - fn method2 = test_crate::{impl test_crate::Trait for ()}::method2 + fn method2> = test_crate::{impl test_crate::Trait for ()}::method2[@TraitClause0_0] } trait test_crate::MyCompare { parent_clause0 : [@TraitClause0]: core::marker::Sized parent_clause1 : [@TraitClause1]: core::marker::Sized - fn compare : test_crate::MyCompare::compare + fn compare = test_crate::MyCompare::compare } fn test_crate::{impl test_crate::MyCompare<&'a (())> for &'a (())}#1::compare<'a>(@1: &'a (()), @2: &'a (())) -> bool @@ -75,7 +75,7 @@ impl<'a> test_crate::{impl test_crate::MyCompare<&'a (())> for &'a (())}#1<'a> : { parent_clause0 = core::marker::Sized<&'_ (())> parent_clause1 = core::marker::Sized<&'_ (())> - fn compare = test_crate::{impl test_crate::MyCompare<&'a (())> for &'a (())}#1::compare + fn compare = test_crate::{impl test_crate::MyCompare<&'a (())> for &'a (())}#1::compare<'a> } fn test_crate::main() @@ -130,7 +130,7 @@ fn test_crate::main() trait test_crate::Foo { - fn foo : test_crate::Foo::foo + fn foo<'a, 'b> = test_crate::Foo::foo<'a, 'b, Self> } fn test_crate::{impl test_crate::Foo for ()}#2::foo<'a, 'b>(@1: &'b (()), @2: &'a (())) -> &'b (()) @@ -145,7 +145,7 @@ fn test_crate::{impl test_crate::Foo for ()}#2::foo<'a, 'b>(@1: &'b (()), @2: &' impl test_crate::{impl test_crate::Foo for ()}#2 : test_crate::Foo<()> { - fn foo = test_crate::{impl test_crate::Foo for ()}#2::foo + fn foo<'a, 'b> = test_crate::{impl test_crate::Foo for ()}#2::foo<'a, 'b> } fn test_crate::call_foo<'e>(@1: &'e (())) -> &'e (()) diff --git a/charon/tests/ui/ml-name-matcher-tests.out b/charon/tests/ui/ml-name-matcher-tests.out index edf612a7..76be287a 100644 --- a/charon/tests/ui/ml-name-matcher-tests.out +++ b/charon/tests/ui/ml-name-matcher-tests.out @@ -16,7 +16,7 @@ trait core::marker::Sized trait test_crate::Trait { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn method : test_crate::Trait::method + fn method> = test_crate::Trait::method[@TraitClause0_0] } struct alloc::alloc::Global = {} @@ -48,7 +48,7 @@ where [@TraitClause0]: core::marker::Sized, { parent_clause0 = core::marker::Sized[@TraitClause0]> - fn method = test_crate::{impl test_crate::Trait[@TraitClause0]> for alloc::boxed::Box[core::marker::Sized]}::method + fn method> = test_crate::{impl test_crate::Trait[@TraitClause0]> for alloc::boxed::Box[core::marker::Sized]}::method[@TraitClause0, @TraitClause0_0] } fn test_crate::{impl test_crate::Trait[core::marker::Sized]> for core::option::Option[@TraitClause1]}#1::method() @@ -72,7 +72,7 @@ where [@TraitClause1]: core::marker::Sized, { parent_clause0 = core::marker::Sized[core::marker::Sized]> - fn method = test_crate::{impl test_crate::Trait[core::marker::Sized]> for core::option::Option[@TraitClause1]}#1::method + fn method> = test_crate::{impl test_crate::Trait[core::marker::Sized]> for core::option::Option[@TraitClause1]}#1::method[@TraitClause0, @TraitClause1, @TraitClause0_0] } struct core::ops::range::RangeFrom @@ -93,12 +93,12 @@ trait core::slice::index::SliceIndex { parent_clause0 : [@TraitClause0]: core::slice::index::private_slice_index::Sealed type Output - fn get : core::slice::index::SliceIndex::get - fn get_mut : core::slice::index::SliceIndex::get_mut - fn get_unchecked : core::slice::index::SliceIndex::get_unchecked - fn get_unchecked_mut : core::slice::index::SliceIndex::get_unchecked_mut - fn index : core::slice::index::SliceIndex::index - fn index_mut : core::slice::index::SliceIndex::index_mut + fn get<'_0> = core::slice::index::SliceIndex::get<'_0_0, Self, T> + fn get_mut<'_0> = core::slice::index::SliceIndex::get_mut<'_0_0, Self, T> + fn get_unchecked = core::slice::index::SliceIndex::get_unchecked + fn get_unchecked_mut = core::slice::index::SliceIndex::get_unchecked_mut + fn index<'_0> = core::slice::index::SliceIndex::index<'_0_0, Self, T> + fn index_mut<'_0> = core::slice::index::SliceIndex::index_mut<'_0_0, Self, T> } fn core::slice::index::{impl core::ops::index::Index for Slice}::index<'_0, T, I>(@1: &'_0 (Slice), @2: I) -> &'_0 (@TraitClause2::Output) @@ -139,12 +139,12 @@ where { parent_clause0 = core::slice::index::private_slice_index::{impl core::slice::index::private_slice_index::Sealed for core::ops::range::RangeFrom[core::marker::Sized]}#3 type Output = Slice - fn get = core::slice::index::{impl core::slice::index::SliceIndex> for core::ops::range::RangeFrom[core::marker::Sized]}#7::get - fn get_mut = core::slice::index::{impl core::slice::index::SliceIndex> for core::ops::range::RangeFrom[core::marker::Sized]}#7::get_mut - fn get_unchecked = core::slice::index::{impl core::slice::index::SliceIndex> for core::ops::range::RangeFrom[core::marker::Sized]}#7::get_unchecked - fn get_unchecked_mut = core::slice::index::{impl core::slice::index::SliceIndex> for core::ops::range::RangeFrom[core::marker::Sized]}#7::get_unchecked_mut - fn index = core::slice::index::{impl core::slice::index::SliceIndex> for core::ops::range::RangeFrom[core::marker::Sized]}#7::index - fn index_mut = core::slice::index::{impl core::slice::index::SliceIndex> for core::ops::range::RangeFrom[core::marker::Sized]}#7::index_mut + fn get<'_0> = core::slice::index::{impl core::slice::index::SliceIndex> for core::ops::range::RangeFrom[core::marker::Sized]}#7::get<'_0_0, T>[@TraitClause0] + fn get_mut<'_0> = core::slice::index::{impl core::slice::index::SliceIndex> for core::ops::range::RangeFrom[core::marker::Sized]}#7::get_mut<'_0_0, T>[@TraitClause0] + fn get_unchecked = core::slice::index::{impl core::slice::index::SliceIndex> for core::ops::range::RangeFrom[core::marker::Sized]}#7::get_unchecked[@TraitClause0] + fn get_unchecked_mut = core::slice::index::{impl core::slice::index::SliceIndex> for core::ops::range::RangeFrom[core::marker::Sized]}#7::get_unchecked_mut[@TraitClause0] + fn index<'_0> = core::slice::index::{impl core::slice::index::SliceIndex> for core::ops::range::RangeFrom[core::marker::Sized]}#7::index<'_0_0, T>[@TraitClause0] + fn index_mut<'_0> = core::slice::index::{impl core::slice::index::SliceIndex> for core::ops::range::RangeFrom[core::marker::Sized]}#7::index_mut<'_0_0, T>[@TraitClause0] } fn test_crate::foo() @@ -203,7 +203,7 @@ fn core::ops::index::Index::index<'_0, Self, Idx>(@1: &'_0 (Self), @2: Idx) -> & trait core::ops::index::Index { type Output - fn index : core::ops::index::Index::index + fn index<'_0> = core::ops::index::Index::index<'_0_0, Self, Idx> } impl core::slice::index::{impl core::ops::index::Index for Slice} : core::ops::index::Index, I> @@ -213,7 +213,7 @@ where [@TraitClause2]: core::slice::index::SliceIndex>, { type Output = @TraitClause2::Output - fn index = core::slice::index::{impl core::ops::index::Index for Slice}::index + fn index<'_0> = core::slice::index::{impl core::ops::index::Index for Slice}::index<'_0_0, T, I>[@TraitClause0, @TraitClause1, @TraitClause2] } fn core::slice::index::SliceIndex::get<'_0, Self, T>(@1: Self, @2: &'_0 (T)) -> core::option::Option<&'_0 (Self::Output)>[core::marker::Sized<&'_0 (Self::Output)>] diff --git a/charon/tests/ui/no_nested_borrows.out b/charon/tests/ui/no_nested_borrows.out index 7eef4139..9fb850e6 100644 --- a/charon/tests/ui/no_nested_borrows.out +++ b/charon/tests/ui/no_nested_borrows.out @@ -637,7 +637,7 @@ fn test_crate::read_then_incr<'_0>(@1: &'_0 mut (u32)) -> u32 trait core::ops::deref::Deref { type Target - fn deref : core::ops::deref::Deref::deref + fn deref<'_0> = core::ops::deref::Deref::deref<'_0_0, Self> } fn core::ops::deref::DerefMut::deref_mut<'_0, Self>(@1: &'_0 mut (Self)) -> &'_0 mut (Self::parent_clause0::Target) @@ -645,7 +645,7 @@ fn core::ops::deref::DerefMut::deref_mut<'_0, Self>(@1: &'_0 mut (Self)) -> &'_0 trait core::ops::deref::DerefMut { parent_clause0 : [@TraitClause0]: core::ops::deref::Deref - fn deref_mut : core::ops::deref::DerefMut::deref_mut + fn deref_mut<'_0> = core::ops::deref::DerefMut::deref_mut<'_0_0, Self> } impl alloc::boxed::{impl core::ops::deref::Deref for alloc::boxed::Box[@TraitClause0]}#38 : core::ops::deref::Deref[@TraitClause0]> @@ -653,7 +653,7 @@ where [@TraitClause0]: core::marker::Sized, { type Target = T - fn deref = alloc::boxed::{impl core::ops::deref::Deref for alloc::boxed::Box[@TraitClause0]}#38::deref + fn deref<'_0> = alloc::boxed::{impl core::ops::deref::Deref for alloc::boxed::Box[@TraitClause0]}#38::deref<'_0_0, T, A>[@TraitClause0] } impl alloc::boxed::{impl core::ops::deref::DerefMut for alloc::boxed::Box[@TraitClause0]}#39 : core::ops::deref::DerefMut[@TraitClause0]> @@ -661,7 +661,7 @@ where [@TraitClause0]: core::marker::Sized, { parent_clause0 = alloc::boxed::{impl core::ops::deref::Deref for alloc::boxed::Box[@TraitClause0]}#38[@TraitClause0] - fn deref_mut = alloc::boxed::{impl core::ops::deref::DerefMut for alloc::boxed::Box[@TraitClause0]}#39::deref_mut + fn deref_mut<'_0> = alloc::boxed::{impl core::ops::deref::DerefMut for alloc::boxed::Box[@TraitClause0]}#39::deref_mut<'_0_0, T, A>[@TraitClause0] } fn core::ops::deref::Deref::deref<'_0, Self>(@1: &'_0 (Self)) -> &'_0 (Self::Target) diff --git a/charon/tests/ui/opacity.out b/charon/tests/ui/opacity.out index 4ddc799f..803f8371 100644 --- a/charon/tests/ui/opacity.out +++ b/charon/tests/ui/opacity.out @@ -33,7 +33,7 @@ trait core::convert::From { parent_clause0 : [@TraitClause0]: core::marker::Sized parent_clause1 : [@TraitClause1]: core::marker::Sized - fn from : core::convert::From::from + fn from = core::convert::From::from } fn core::convert::From::from(@1: T) -> Self @@ -119,7 +119,7 @@ trait core::convert::Into { parent_clause0 : [@TraitClause0]: core::marker::Sized parent_clause1 : [@TraitClause1]: core::marker::Sized - fn into : core::convert::Into::into + fn into = core::convert::Into::into } impl core::convert::{impl core::convert::Into for T}#3 : core::convert::Into @@ -130,7 +130,7 @@ where { parent_clause0 = @TraitClause0 parent_clause1 = @TraitClause1 - fn into = core::convert::{impl core::convert::Into for T}#3::into + fn into = core::convert::{impl core::convert::Into for T}#3::into[@TraitClause0, @TraitClause1, @TraitClause2] } diff --git a/charon/tests/ui/opaque_attribute.out b/charon/tests/ui/opaque_attribute.out index 796140fe..7094125e 100644 --- a/charon/tests/ui/opaque_attribute.out +++ b/charon/tests/ui/opaque_attribute.out @@ -2,8 +2,8 @@ trait test_crate::BoolTrait { - fn get_bool : test_crate::BoolTrait::get_bool - fn ret_true : test_crate::BoolTrait::ret_true + fn get_bool<'_0> = test_crate::BoolTrait::get_bool<'_0_0, Self> + fn ret_true<'_0> = test_crate::BoolTrait::ret_true<'_0_0, Self> } fn test_crate::{impl test_crate::BoolTrait for bool}::get_bool<'_0>(@1: &'_0 (bool)) -> bool @@ -17,7 +17,7 @@ fn test_crate::{impl test_crate::BoolTrait for bool}::get_bool<'_0>(@1: &'_0 (bo impl test_crate::{impl test_crate::BoolTrait for bool} : test_crate::BoolTrait { - fn get_bool = test_crate::{impl test_crate::BoolTrait for bool}::get_bool + fn get_bool<'_0> = test_crate::{impl test_crate::BoolTrait for bool}::get_bool<'_0_0> } trait core::marker::Sized diff --git a/charon/tests/ui/polonius_map.out b/charon/tests/ui/polonius_map.out index 0efe48b5..d7936a4d 100644 --- a/charon/tests/ui/polonius_map.out +++ b/charon/tests/ui/polonius_map.out @@ -20,40 +20,40 @@ enum core::option::Option trait core::cmp::PartialEq { - fn eq : core::cmp::PartialEq::eq - fn ne : core::cmp::PartialEq::ne + fn eq<'_0, '_1> = core::cmp::PartialEq::eq<'_0_0, '_0_1, Self, Rhs> + fn ne<'_0, '_1> = core::cmp::PartialEq::ne<'_0_0, '_0_1, Self, Rhs> } trait core::cmp::Eq { parent_clause0 : [@TraitClause0]: core::cmp::PartialEq - fn assert_receiver_is_total_eq : core::cmp::Eq::assert_receiver_is_total_eq + fn assert_receiver_is_total_eq<'_0> = core::cmp::Eq::assert_receiver_is_total_eq<'_0_0, Self> } trait core::hash::Hasher { - fn finish : core::hash::Hasher::finish - fn write : core::hash::Hasher::write - fn write_u8 : core::hash::Hasher::write_u8 - fn write_u16 : core::hash::Hasher::write_u16 - fn write_u32 : core::hash::Hasher::write_u32 - fn write_u64 : core::hash::Hasher::write_u64 - fn write_u128 : core::hash::Hasher::write_u128 - fn write_usize : core::hash::Hasher::write_usize - fn write_i8 : core::hash::Hasher::write_i8 - fn write_i16 : core::hash::Hasher::write_i16 - fn write_i32 : core::hash::Hasher::write_i32 - fn write_i64 : core::hash::Hasher::write_i64 - fn write_i128 : core::hash::Hasher::write_i128 - fn write_isize : core::hash::Hasher::write_isize - fn write_length_prefix : core::hash::Hasher::write_length_prefix - fn write_str : core::hash::Hasher::write_str + fn finish<'_0> = core::hash::Hasher::finish<'_0_0, Self> + fn write<'_0, '_1> = core::hash::Hasher::write<'_0_0, '_0_1, Self> + fn write_u8<'_0> = core::hash::Hasher::write_u8<'_0_0, Self> + fn write_u16<'_0> = core::hash::Hasher::write_u16<'_0_0, Self> + fn write_u32<'_0> = core::hash::Hasher::write_u32<'_0_0, Self> + fn write_u64<'_0> = core::hash::Hasher::write_u64<'_0_0, Self> + fn write_u128<'_0> = core::hash::Hasher::write_u128<'_0_0, Self> + fn write_usize<'_0> = core::hash::Hasher::write_usize<'_0_0, Self> + fn write_i8<'_0> = core::hash::Hasher::write_i8<'_0_0, Self> + fn write_i16<'_0> = core::hash::Hasher::write_i16<'_0_0, Self> + fn write_i32<'_0> = core::hash::Hasher::write_i32<'_0_0, Self> + fn write_i64<'_0> = core::hash::Hasher::write_i64<'_0_0, Self> + fn write_i128<'_0> = core::hash::Hasher::write_i128<'_0_0, Self> + fn write_isize<'_0> = core::hash::Hasher::write_isize<'_0_0, Self> + fn write_length_prefix<'_0> = core::hash::Hasher::write_length_prefix<'_0_0, Self> + fn write_str<'_0, '_1> = core::hash::Hasher::write_str<'_0_0, '_0_1, Self> } trait core::hash::Hash { - fn hash : core::hash::Hash::hash - fn hash_slice : core::hash::Hash::hash_slice + fn hash<'_0, '_1, H, [@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::hash::Hasher> = core::hash::Hash::hash<'_0_0, '_0_1, Self, H>[@TraitClause0_0, @TraitClause0_1] + fn hash_slice<'_0, '_1, H, [@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::hash::Hasher, [@TraitClause2]: core::marker::Sized> = core::hash::Hash::hash_slice<'_0_0, '_0_1, Self, H>[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2] } trait core::hash::BuildHasher @@ -61,13 +61,13 @@ trait core::hash::BuildHasher parent_clause0 : [@TraitClause0]: core::hash::Hasher parent_clause1 : [@TraitClause1]: core::marker::Sized type Hasher - fn build_hasher : core::hash::BuildHasher::build_hasher - fn hash_one : core::hash::BuildHasher::hash_one + fn build_hasher<'_0> = core::hash::BuildHasher::build_hasher<'_0_0, Self> + fn hash_one<'_0, T, [@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::hash::Hash, [@TraitClause2]: core::marker::Sized, [@TraitClause3]: core::hash::Hasher> = core::hash::BuildHasher::hash_one<'_0_0, Self, T>[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] } trait core::borrow::Borrow { - fn borrow : core::borrow::Borrow::borrow + fn borrow<'_0> = core::borrow::Borrow::borrow<'_0_0, Self, Borrowed> } fn std::collections::hash::map::{std::collections::hash::map::HashMap[@TraitClause0, @TraitClause1, @TraitClause2]}#2::get<'_0, '_1, K, V, S, Q>(@1: &'_0 (std::collections::hash::map::HashMap[@TraitClause0, @TraitClause1, @TraitClause2]), @2: &'_1 (Q)) -> core::option::Option<&'_0 (V)>[core::marker::Sized<&'_0 (V)>] @@ -86,7 +86,7 @@ fn core::borrow::{impl core::borrow::Borrow for T}::borrow<'_0, T>(@1: &'_0 ( impl core::borrow::{impl core::borrow::Borrow for T} : core::borrow::Borrow { - fn borrow = core::borrow::{impl core::borrow::Borrow for T}::borrow + fn borrow<'_0> = core::borrow::{impl core::borrow::Borrow for T}::borrow<'_0_0, T> } fn core::hash::impls::{impl core::hash::Hash for u32}#11::hash<'_0, '_1, H>(@1: &'_0 (u32), @2: &'_1 mut (H)) @@ -101,8 +101,8 @@ where impl core::hash::impls::{impl core::hash::Hash for u32}#11 : core::hash::Hash { - fn hash = core::hash::impls::{impl core::hash::Hash for u32}#11::hash - fn hash_slice = core::hash::impls::{impl core::hash::Hash for u32}#11::hash_slice + fn hash<'_0, '_1, H, [@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::hash::Hasher> = core::hash::impls::{impl core::hash::Hash for u32}#11::hash<'_0_0, '_0_1, H>[@TraitClause0_0, @TraitClause0_1] + fn hash_slice<'_0, '_1, H, [@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::hash::Hasher> = core::hash::impls::{impl core::hash::Hash for u32}#11::hash_slice<'_0_0, '_0_1, H>[@TraitClause0_0, @TraitClause0_1] } fn core::cmp::impls::{impl core::cmp::PartialEq for u32}#24::eq<'_0, '_1>(@1: &'_0 (u32), @2: &'_1 (u32)) -> bool @@ -111,8 +111,8 @@ fn core::cmp::impls::{impl core::cmp::PartialEq for u32}#24::ne<'_0, '_1>(@ impl core::cmp::impls::{impl core::cmp::PartialEq for u32}#24 : core::cmp::PartialEq { - fn eq = core::cmp::impls::{impl core::cmp::PartialEq for u32}#24::eq - fn ne = core::cmp::impls::{impl core::cmp::PartialEq for u32}#24::ne + fn eq<'_0, '_1> = core::cmp::impls::{impl core::cmp::PartialEq for u32}#24::eq<'_0_0, '_0_1> + fn ne<'_0, '_1> = core::cmp::impls::{impl core::cmp::PartialEq for u32}#24::ne<'_0_0, '_0_1> } impl core::cmp::impls::{impl core::cmp::Eq for u32}#43 : core::cmp::Eq @@ -130,9 +130,9 @@ fn std::hash::random::{impl core::hash::Hasher for std::hash::random::DefaultHas impl std::hash::random::{impl core::hash::Hasher for std::hash::random::DefaultHasher}#4 : core::hash::Hasher { - fn finish = std::hash::random::{impl core::hash::Hasher for std::hash::random::DefaultHasher}#4::finish - fn write = std::hash::random::{impl core::hash::Hasher for std::hash::random::DefaultHasher}#4::write - fn write_str = std::hash::random::{impl core::hash::Hasher for std::hash::random::DefaultHasher}#4::write_str + fn finish<'_0> = std::hash::random::{impl core::hash::Hasher for std::hash::random::DefaultHasher}#4::finish<'_0_0> + fn write<'_0, '_1> = std::hash::random::{impl core::hash::Hasher for std::hash::random::DefaultHasher}#4::write<'_0_0, '_0_1> + fn write_str<'_0, '_1> = std::hash::random::{impl core::hash::Hasher for std::hash::random::DefaultHasher}#4::write_str<'_0_0, '_0_1> } fn std::hash::random::{impl core::hash::BuildHasher for std::hash::random::RandomState}#1::build_hasher<'_0>(@1: &'_0 (std::hash::random::RandomState)) -> std::hash::random::DefaultHasher @@ -142,7 +142,7 @@ impl std::hash::random::{impl core::hash::BuildHasher for std::hash::random::Ran parent_clause0 = std::hash::random::{impl core::hash::Hasher for std::hash::random::DefaultHasher}#4 parent_clause1 = core::marker::Sized type Hasher = std::hash::random::DefaultHasher - fn build_hasher = std::hash::random::{impl core::hash::BuildHasher for std::hash::random::RandomState}#1::build_hasher + fn build_hasher<'_0> = std::hash::random::{impl core::hash::BuildHasher for std::hash::random::RandomState}#1::build_hasher<'_0_0> } fn std::collections::hash::map::{std::collections::hash::map::HashMap[@TraitClause0, @TraitClause1, @TraitClause2]}#2::insert<'_0, K, V, S>(@1: &'_0 mut (std::collections::hash::map::HashMap[@TraitClause0, @TraitClause1, @TraitClause2]), @2: K, @3: V) -> core::option::Option[@TraitClause1] @@ -157,7 +157,7 @@ where trait core::ops::index::Index { type Output - fn index : core::ops::index::Index::index + fn index<'_0> = core::ops::index::Index::index<'_0_0, Self, Idx> } fn std::collections::hash::map::{impl core::ops::index::Index<&'_0 (Q)> for std::collections::hash::map::HashMap[@TraitClause0, @TraitClause1, @TraitClause2]}#9::index<'_0, '_1, K, Q, V, S>(@1: &'_1 (std::collections::hash::map::HashMap[@TraitClause0, @TraitClause1, @TraitClause2]), @2: &'_0 (Q)) -> &'_1 (std::collections::hash::map::{impl core::ops::index::Index<&'_0 (Q)> for std::collections::hash::map::HashMap[@TraitClause0, @TraitClause1, @TraitClause2]}#9<'_, K, Q, V, S>[@TraitClause0, @TraitClause1, @TraitClause2, @TraitClause3, @TraitClause4, @TraitClause5, @TraitClause6, @TraitClause7, @TraitClause8]::Output) @@ -246,7 +246,7 @@ where [@TraitClause8]: core::hash::BuildHasher, { type Output = V - fn index = std::collections::hash::map::{impl core::ops::index::Index<&'_0 (Q)> for std::collections::hash::map::HashMap[@TraitClause0, @TraitClause1, @TraitClause2]}#9::index + fn index<'_0> = std::collections::hash::map::{impl core::ops::index::Index<&'_0 (Q)> for std::collections::hash::map::HashMap[@TraitClause0, @TraitClause1, @TraitClause2]}#9::index<'_0, '_0_0, K, Q, V, S>[@TraitClause0, @TraitClause1, @TraitClause2, @TraitClause3, @TraitClause4, @TraitClause5, @TraitClause6, @TraitClause7, @TraitClause8] } fn core::hash::BuildHasher::hash_one<'_0, Self, T>(@1: &'_0 (Self), @2: T) -> u64 diff --git a/charon/tests/ui/predicates-on-late-bound-vars.out b/charon/tests/ui/predicates-on-late-bound-vars.out index 24ab273f..8ee6fef5 100644 --- a/charon/tests/ui/predicates-on-late-bound-vars.out +++ b/charon/tests/ui/predicates-on-late-bound-vars.out @@ -25,8 +25,8 @@ fn test_crate::wrap<'a>(@1: &'a (u32)) -> core::option::Option<&'a (u32)>[core:: trait core::clone::Clone { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn clone : core::clone::Clone::clone - fn clone_from : core::clone::Clone::clone_from + fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self> + fn clone_from<'_0, '_1> = core::clone::Clone::clone_from<'_0_0, '_0_1, Self> } fn test_crate::wrap2<'a>(@1: &'a (u32)) -> core::option::Option<&'a (u32)>[core::marker::Sized<&'_ (u32)>] diff --git a/charon/tests/ui/quantified-clause.out b/charon/tests/ui/quantified-clause.out index d1fcf70e..9c9115ab 100644 --- a/charon/tests/ui/quantified-clause.out +++ b/charon/tests/ui/quantified-clause.out @@ -10,7 +10,7 @@ trait core::ops::function::FnOnce parent_clause1 : [@TraitClause1]: core::marker::Tuple parent_clause2 : [@TraitClause2]: core::marker::Sized type Output - fn call_once : core::ops::function::FnOnce::call_once + fn call_once = core::ops::function::FnOnce::call_once } trait core::ops::function::FnMut @@ -18,7 +18,7 @@ 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 : core::ops::function::FnMut::call_mut + fn call_mut<'_0> = core::ops::function::FnMut::call_mut<'_0_0, Self, Args> } fn test_crate::foo(@1: F) @@ -87,8 +87,8 @@ opaque type core::array::iter::IntoIter trait core::clone::Clone { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn clone : core::clone::Clone::clone - fn clone_from : core::clone::Clone::clone_from + fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self> + fn clone_from<'_0, '_1> = core::clone::Clone::clone_from<'_0_0, '_0_1, Self> } trait core::marker::Copy @@ -119,7 +119,7 @@ fn core::clone::impls::{impl core::clone::Clone for usize}#5::clone<'_0>(@1: &'_ impl core::clone::impls::{impl core::clone::Clone for usize}#5 : core::clone::Clone { parent_clause0 = core::marker::Sized - fn clone = core::clone::impls::{impl core::clone::Clone for usize}#5::clone + 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 @@ -136,7 +136,7 @@ fn core::num::nonzero::private::{impl core::clone::Clone for core::num::nonzero: 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 = core::num::nonzero::private::{impl core::clone::Clone for core::num::nonzero::private::NonZeroUsizeInner}#26::clone + 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 @@ -229,7 +229,7 @@ opaque type core::iter::adapters::inspect::Inspect trait core::ops::try_trait::FromResidual { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn from_residual : core::ops::try_trait::FromResidual::from_residual + fn from_residual = core::ops::try_trait::FromResidual::from_residual } enum core::ops::control_flow::ControlFlow @@ -248,8 +248,8 @@ trait core::ops::try_trait::Try parent_clause2 : [@TraitClause2]: core::marker::Sized type Output type Residual - fn from_output : core::ops::try_trait::Try::from_output - fn branch : core::ops::try_trait::Try::branch + fn from_output = core::ops::try_trait::Try::from_output + fn branch = core::ops::try_trait::Try::branch } trait core::ops::try_trait::Residual @@ -267,19 +267,19 @@ where trait core::default::Default { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn default : core::default::Default::default + fn default = core::default::Default::default } trait core::cmp::PartialEq { - fn eq : core::cmp::PartialEq::eq - fn ne : core::cmp::PartialEq::ne + fn eq<'_0, '_1> = core::cmp::PartialEq::eq<'_0_0, '_0_1, Self, Rhs> + fn ne<'_0, '_1> = core::cmp::PartialEq::ne<'_0_0, '_0_1, Self, Rhs> } trait core::cmp::Eq { parent_clause0 : [@TraitClause0]: core::cmp::PartialEq - fn assert_receiver_is_total_eq : core::cmp::Eq::assert_receiver_is_total_eq + fn assert_receiver_is_total_eq<'_0> = core::cmp::Eq::assert_receiver_is_total_eq<'_0_0, Self> } enum core::cmp::Ordering = @@ -291,21 +291,21 @@ enum core::cmp::Ordering = trait core::cmp::PartialOrd { parent_clause0 : [@TraitClause0]: core::cmp::PartialEq - fn partial_cmp : core::cmp::PartialOrd::partial_cmp - fn lt : core::cmp::PartialOrd::lt - fn le : core::cmp::PartialOrd::le - fn gt : core::cmp::PartialOrd::gt - fn ge : core::cmp::PartialOrd::ge + fn partial_cmp<'_0, '_1> = core::cmp::PartialOrd::partial_cmp<'_0_0, '_0_1, Self, Rhs> + fn lt<'_0, '_1> = core::cmp::PartialOrd::lt<'_0_0, '_0_1, Self, Rhs> + fn le<'_0, '_1> = core::cmp::PartialOrd::le<'_0_0, '_0_1, Self, Rhs> + fn gt<'_0, '_1> = core::cmp::PartialOrd::gt<'_0_0, '_0_1, Self, Rhs> + fn ge<'_0, '_1> = core::cmp::PartialOrd::ge<'_0_0, '_0_1, Self, Rhs> } trait core::cmp::Ord { parent_clause0 : [@TraitClause0]: core::cmp::Eq parent_clause1 : [@TraitClause1]: core::cmp::PartialOrd - fn cmp : core::cmp::Ord::cmp - fn max : core::cmp::Ord::max - fn min : core::cmp::Ord::min - fn clamp : core::cmp::Ord::clamp + fn cmp<'_0, '_1> = core::cmp::Ord::cmp<'_0_0, '_0_1, Self> + fn max<[@TraitClause0]: core::marker::Sized> = core::cmp::Ord::max[@TraitClause0_0] + fn min<[@TraitClause0]: core::marker::Sized> = core::cmp::Ord::min[@TraitClause0_0] + fn clamp<[@TraitClause0]: core::marker::Sized> = core::cmp::Ord::clamp[@TraitClause0_0] } opaque type core::iter::adapters::rev::Rev @@ -333,90 +333,90 @@ where parent_clause2 : [@TraitClause2]: core::marker::Sized type Item type IntoIter - fn into_iter : core::iter::traits::collect::IntoIterator::into_iter + fn into_iter = core::iter::traits::collect::IntoIterator::into_iter } trait core::iter::traits::iterator::Iterator { parent_clause0 : [@TraitClause0]: core::marker::Sized type Item - fn next : core::iter::traits::iterator::Iterator::next - fn next_chunk : core::iter::traits::iterator::Iterator::next_chunk - fn size_hint : core::iter::traits::iterator::Iterator::size_hint - fn count : core::iter::traits::iterator::Iterator::count - fn last : core::iter::traits::iterator::Iterator::last - fn advance_by : core::iter::traits::iterator::Iterator::advance_by - fn nth : core::iter::traits::iterator::Iterator::nth - fn step_by : core::iter::traits::iterator::Iterator::step_by - fn chain : core::iter::traits::iterator::Iterator::chain - fn zip : core::iter::traits::iterator::Iterator::zip - fn intersperse : core::iter::traits::iterator::Iterator::intersperse - fn intersperse_with : core::iter::traits::iterator::Iterator::intersperse_with - fn map : core::iter::traits::iterator::Iterator::map - fn for_each : core::iter::traits::iterator::Iterator::for_each - fn filter : core::iter::traits::iterator::Iterator::filter - fn filter_map : core::iter::traits::iterator::Iterator::filter_map - fn enumerate : core::iter::traits::iterator::Iterator::enumerate - fn peekable : core::iter::traits::iterator::Iterator::peekable - fn skip_while : core::iter::traits::iterator::Iterator::skip_while - fn take_while : core::iter::traits::iterator::Iterator::take_while - fn map_while : core::iter::traits::iterator::Iterator::map_while - fn skip : core::iter::traits::iterator::Iterator::skip - fn take : core::iter::traits::iterator::Iterator::take - fn scan : core::iter::traits::iterator::Iterator::scan - fn flat_map : core::iter::traits::iterator::Iterator::flat_map - fn flatten : core::iter::traits::iterator::Iterator::flatten - fn map_windows : core::iter::traits::iterator::Iterator::map_windows - fn fuse : core::iter::traits::iterator::Iterator::fuse - fn inspect : core::iter::traits::iterator::Iterator::inspect - fn by_ref : core::iter::traits::iterator::Iterator::by_ref - fn collect : core::iter::traits::iterator::Iterator::collect - fn try_collect : core::iter::traits::iterator::Iterator::try_collect - fn collect_into : core::iter::traits::iterator::Iterator::collect_into - fn partition : core::iter::traits::iterator::Iterator::partition - fn partition_in_place : core::iter::traits::iterator::Iterator::partition_in_place - fn is_partitioned : core::iter::traits::iterator::Iterator::is_partitioned - fn try_fold : core::iter::traits::iterator::Iterator::try_fold - fn try_for_each : core::iter::traits::iterator::Iterator::try_for_each - fn fold : core::iter::traits::iterator::Iterator::fold - fn reduce : core::iter::traits::iterator::Iterator::reduce - fn try_reduce : core::iter::traits::iterator::Iterator::try_reduce - fn all : core::iter::traits::iterator::Iterator::all - fn any : core::iter::traits::iterator::Iterator::any - fn find : core::iter::traits::iterator::Iterator::find - fn find_map : core::iter::traits::iterator::Iterator::find_map - fn try_find : core::iter::traits::iterator::Iterator::try_find - fn position : core::iter::traits::iterator::Iterator::position - fn rposition : core::iter::traits::iterator::Iterator::rposition - fn max : core::iter::traits::iterator::Iterator::max - fn min : core::iter::traits::iterator::Iterator::min - fn max_by_key : core::iter::traits::iterator::Iterator::max_by_key - fn max_by : core::iter::traits::iterator::Iterator::max_by - fn min_by_key : core::iter::traits::iterator::Iterator::min_by_key - fn min_by : core::iter::traits::iterator::Iterator::min_by - fn rev : core::iter::traits::iterator::Iterator::rev - fn unzip : core::iter::traits::iterator::Iterator::unzip - fn copied : core::iter::traits::iterator::Iterator::copied - fn cloned : core::iter::traits::iterator::Iterator::cloned - fn cycle : core::iter::traits::iterator::Iterator::cycle - fn array_chunks : core::iter::traits::iterator::Iterator::array_chunks - fn sum : core::iter::traits::iterator::Iterator::sum - fn product : core::iter::traits::iterator::Iterator::product - fn cmp : core::iter::traits::iterator::Iterator::cmp - fn cmp_by : core::iter::traits::iterator::Iterator::cmp_by - fn partial_cmp : core::iter::traits::iterator::Iterator::partial_cmp - fn partial_cmp_by : core::iter::traits::iterator::Iterator::partial_cmp_by - fn eq : core::iter::traits::iterator::Iterator::eq - fn eq_by : core::iter::traits::iterator::Iterator::eq_by - fn ne : core::iter::traits::iterator::Iterator::ne - fn lt : core::iter::traits::iterator::Iterator::lt - fn le : core::iter::traits::iterator::Iterator::le - fn gt : core::iter::traits::iterator::Iterator::gt - fn ge : core::iter::traits::iterator::Iterator::ge - fn is_sorted : core::iter::traits::iterator::Iterator::is_sorted - fn is_sorted_by : core::iter::traits::iterator::Iterator::is_sorted_by - fn is_sorted_by_key : core::iter::traits::iterator::Iterator::is_sorted_by_key - fn __iterator_get_unchecked : core::iter::traits::iterator::Iterator::__iterator_get_unchecked + fn next<'_0> = core::iter::traits::iterator::Iterator::next<'_0_0, 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>[@TraitClause0_0] + fn size_hint<'_0> = core::iter::traits::iterator::Iterator::size_hint<'_0_0, Self> + fn count<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::count[@TraitClause0_0] + fn last<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::last[@TraitClause0_0] + fn advance_by<'_0> = core::iter::traits::iterator::Iterator::advance_by<'_0_0, Self> + fn nth<'_0> = core::iter::traits::iterator::Iterator::nth<'_0_0, Self> + fn step_by<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::step_by[@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[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn zip, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::iter::traits::collect::IntoIterator> = core::iter::traits::iterator::Iterator::zip[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn intersperse<[@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::clone::Clone> = core::iter::traits::iterator::Iterator::intersperse[@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[@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[@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[@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[@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[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn enumerate<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::enumerate[@TraitClause0_0] + fn peekable<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::peekable[@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[@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[@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[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn skip<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::skip[@TraitClause0_0] + fn take<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::take[@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[@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[@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[@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[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn fuse<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::fuse[@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[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn by_ref<'_0, [@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::by_ref<'_0_0, Self>[@TraitClause0_0] + fn collect, [@TraitClause1]: core::iter::traits::collect::FromIterator, [@TraitClause2]: core::marker::Sized> = core::iter::traits::iterator::Iterator::collect[@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>[@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>[@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[@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>[@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[@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>[@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>[@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[@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[@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>[@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>[@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>[@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>[@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>[@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>[@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>[@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>[@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[@TraitClause0_0, @TraitClause0_1] + fn min<[@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::cmp::Ord> = core::iter::traits::iterator::Iterator::min[@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[@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[@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[@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[@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[@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[@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>[@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>[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn cycle<[@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::clone::Clone> = core::iter::traits::iterator::Iterator::cycle[@TraitClause0_0, @TraitClause0_1] + fn array_chunks> = core::iter::traits::iterator::Iterator::array_chunks[@TraitClause0_0] + fn sum, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::iter::traits::accum::Sum> = core::iter::traits::iterator::Iterator::sum[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn product, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::iter::traits::accum::Product> = core::iter::traits::iterator::Iterator::product[@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[@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[@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[@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[@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[@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[@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[@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[@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[@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[@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[@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[@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[@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[@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>[@TraitClause0_0] } opaque type core::iter::adapters::intersperse::Intersperse @@ -459,34 +459,34 @@ trait core::iter::traits::collect::FromIterator { parent_clause0 : [@TraitClause0]: core::marker::Sized parent_clause1 : [@TraitClause1]: core::marker::Sized - fn from_iter : core::iter::traits::collect::FromIterator::from_iter + fn from_iter, [@TraitClause1]: core::iter::traits::collect::IntoIterator, @TraitClause1_1::Item = A> = core::iter::traits::collect::FromIterator::from_iter[@TraitClause0_0, @TraitClause0_1] } trait core::iter::traits::collect::Extend { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn extend : core::iter::traits::collect::Extend::extend - fn extend_one : core::iter::traits::collect::Extend::extend_one - fn extend_reserve : core::iter::traits::collect::Extend::extend_reserve - fn extend_one_unchecked : core::iter::traits::collect::Extend::extend_one_unchecked + 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>[@TraitClause0_0, @TraitClause0_1] + fn extend_one<'_0> = core::iter::traits::collect::Extend::extend_one<'_0_0, Self, A> + fn extend_reserve<'_0> = core::iter::traits::collect::Extend::extend_reserve<'_0_0, Self, A> + fn extend_one_unchecked<'_0, [@TraitClause0]: core::marker::Sized> = core::iter::traits::collect::Extend::extend_one_unchecked<'_0_0, Self, A>[@TraitClause0_0] } trait core::iter::traits::double_ended::DoubleEndedIterator { parent_clause0 : [@TraitClause0]: core::iter::traits::iterator::Iterator - fn next_back : core::iter::traits::double_ended::DoubleEndedIterator::next_back - fn advance_back_by : core::iter::traits::double_ended::DoubleEndedIterator::advance_back_by - fn nth_back : core::iter::traits::double_ended::DoubleEndedIterator::nth_back - fn try_rfold : core::iter::traits::double_ended::DoubleEndedIterator::try_rfold - fn rfold : core::iter::traits::double_ended::DoubleEndedIterator::rfold - fn rfind : core::iter::traits::double_ended::DoubleEndedIterator::rfind + fn next_back<'_0> = core::iter::traits::double_ended::DoubleEndedIterator::next_back<'_0_0, Self> + fn advance_back_by<'_0> = core::iter::traits::double_ended::DoubleEndedIterator::advance_back_by<'_0_0, Self> + fn nth_back<'_0> = core::iter::traits::double_ended::DoubleEndedIterator::nth_back<'_0_0, 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>[@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[@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>[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2] } trait core::iter::traits::exact_size::ExactSizeIterator { parent_clause0 : [@TraitClause0]: core::iter::traits::iterator::Iterator - fn len : core::iter::traits::exact_size::ExactSizeIterator::len - fn is_empty : core::iter::traits::exact_size::ExactSizeIterator::is_empty + fn len<'_0> = core::iter::traits::exact_size::ExactSizeIterator::len<'_0_0, Self> + fn is_empty<'_0> = core::iter::traits::exact_size::ExactSizeIterator::is_empty<'_0_0, Self> } opaque type core::iter::adapters::array_chunks::ArrayChunks @@ -498,21 +498,21 @@ trait core::iter::traits::accum::Sum { parent_clause0 : [@TraitClause0]: core::marker::Sized parent_clause1 : [@TraitClause1]: core::marker::Sized - fn sum : core::iter::traits::accum::Sum::sum + fn sum, [@TraitClause1]: core::iter::traits::iterator::Iterator, @TraitClause1_1::Item = A> = core::iter::traits::accum::Sum::sum[@TraitClause0_0, @TraitClause0_1] } trait core::iter::traits::accum::Product { parent_clause0 : [@TraitClause0]: core::marker::Sized parent_clause1 : [@TraitClause1]: core::marker::Sized - fn product : core::iter::traits::accum::Product::product + fn product, [@TraitClause1]: core::iter::traits::iterator::Iterator, @TraitClause1_1::Item = A> = core::iter::traits::accum::Product::product[@TraitClause0_0, @TraitClause0_1] } trait core::iter::adapters::zip::TrustedRandomAccessNoCoerce { parent_clause0 : [@TraitClause0]: core::marker::Sized const MAY_HAVE_SIDE_EFFECT : bool - fn size : core::iter::adapters::zip::TrustedRandomAccessNoCoerce::size + fn size<'_0, [@TraitClause0]: core::iter::traits::iterator::Iterator> = core::iter::adapters::zip::TrustedRandomAccessNoCoerce::size<'_0_0, Self>[@TraitClause0_0] } impl test_crate::{impl test_crate::Trait for core::result::Result[@TraitClause0, @TraitClause1]} : test_crate::Trait[@TraitClause0, @TraitClause1]> @@ -1055,11 +1055,37 @@ unsafe fn core::iter::traits::iterator::Iterator::__iterator_get_unchecked<'_0, where [@TraitClause0]: core::iter::adapters::zip::TrustedRandomAccessNoCoerce, -fn core::iter::traits::collect::FromIterator::from_iter(@1: T) -> Self +fn core::cmp::PartialEq::eq<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool + +fn core::cmp::PartialEq::ne<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool + +fn core::cmp::Ord::cmp<'_0, '_1, Self>(@1: &'_0 (Self), @2: &'_1 (Self)) -> core::cmp::Ordering + +fn core::cmp::Ord::max(@1: Self, @2: Self) -> Self where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::iter::traits::collect::IntoIterator, - @TraitClause1::Item = A, + [@TraitClause0]: core::marker::Sized, + +fn core::cmp::Ord::min(@1: Self, @2: Self) -> Self +where + [@TraitClause0]: core::marker::Sized, + +fn core::cmp::Ord::clamp(@1: Self, @2: Self, @3: Self) -> Self +where + [@TraitClause0]: core::marker::Sized, + +fn core::cmp::Eq::assert_receiver_is_total_eq<'_0, Self>(@1: &'_0 (Self)) + +fn core::cmp::PartialOrd::partial_cmp<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> core::option::Option[core::marker::Sized] + +fn core::cmp::PartialOrd::lt<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool + +fn core::cmp::PartialOrd::le<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool + +fn core::cmp::PartialOrd::gt<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool + +fn core::cmp::PartialOrd::ge<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool + +fn core::default::Default::default() -> Self fn core::ops::try_trait::Try::from_output(@1: Self::Output) -> Self @@ -1067,6 +1093,28 @@ fn core::ops::try_trait::Try::branch(@1: Self) -> core::ops::control_flow: fn core::ops::try_trait::FromResidual::from_residual(@1: R) -> Self +fn core::iter::adapters::zip::TrustedRandomAccessNoCoerce::size<'_0, Self>(@1: &'_0 (Self)) -> usize +where + [@TraitClause0]: core::iter::traits::iterator::Iterator, + +fn core::iter::traits::accum::Sum::sum(@1: I) -> Self +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::iter::traits::iterator::Iterator, + @TraitClause1::Item = A, + +fn core::iter::traits::accum::Product::product(@1: I) -> Self +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::iter::traits::iterator::Iterator, + @TraitClause1::Item = A, + +fn core::iter::traits::collect::FromIterator::from_iter(@1: T) -> Self +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::iter::traits::collect::IntoIterator, + @TraitClause1::Item = A, + fn core::iter::traits::collect::Extend::extend<'_0, Self, A, T>(@1: &'_0 mut (Self), @2: T) where [@TraitClause0]: core::marker::Sized, @@ -1081,8 +1129,6 @@ unsafe fn core::iter::traits::collect::Extend::extend_one_unchecked<'_0, Self, A where [@TraitClause0]: core::marker::Sized, -fn core::default::Default::default() -> Self - fn core::iter::traits::double_ended::DoubleEndedIterator::next_back<'_0, Self>(@1: &'_0 mut (Self)) -> core::option::Option[Self::parent_clause0::parent_clause0] 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]>] @@ -1119,51 +1165,5 @@ fn core::iter::traits::exact_size::ExactSizeIterator::len<'_0, Self>(@1: &'_0 (S fn core::iter::traits::exact_size::ExactSizeIterator::is_empty<'_0, Self>(@1: &'_0 (Self)) -> bool -fn core::cmp::Ord::cmp<'_0, '_1, Self>(@1: &'_0 (Self), @2: &'_1 (Self)) -> core::cmp::Ordering - -fn core::cmp::Ord::max(@1: Self, @2: Self) -> Self -where - [@TraitClause0]: core::marker::Sized, - -fn core::cmp::Ord::min(@1: Self, @2: Self) -> Self -where - [@TraitClause0]: core::marker::Sized, - -fn core::cmp::Ord::clamp(@1: Self, @2: Self, @3: Self) -> Self -where - [@TraitClause0]: core::marker::Sized, - -fn core::cmp::Eq::assert_receiver_is_total_eq<'_0, Self>(@1: &'_0 (Self)) - -fn core::cmp::PartialEq::eq<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool - -fn core::cmp::PartialEq::ne<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool - -fn core::cmp::PartialOrd::partial_cmp<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> core::option::Option[core::marker::Sized] - -fn core::cmp::PartialOrd::lt<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool - -fn core::cmp::PartialOrd::le<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool - -fn core::cmp::PartialOrd::gt<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool - -fn core::cmp::PartialOrd::ge<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool - -fn core::iter::traits::accum::Sum::sum(@1: I) -> Self -where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::iter::traits::iterator::Iterator, - @TraitClause1::Item = A, - -fn core::iter::traits::accum::Product::product(@1: I) -> Self -where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::iter::traits::iterator::Iterator, - @TraitClause1::Item = A, - -fn core::iter::adapters::zip::TrustedRandomAccessNoCoerce::size<'_0, Self>(@1: &'_0 (Self)) -> usize -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - diff --git a/charon/tests/ui/region-inference-vars.out b/charon/tests/ui/region-inference-vars.out index 2ea9810b..e356ad3d 100644 --- a/charon/tests/ui/region-inference-vars.out +++ b/charon/tests/ui/region-inference-vars.out @@ -16,7 +16,7 @@ trait test_crate::MyTryFrom parent_clause0 : [@TraitClause0]: core::marker::Sized parent_clause1 : [@TraitClause1]: core::marker::Sized type Error - fn from : test_crate::MyTryFrom::from + fn from<[@TraitClause0]: core::marker::Sized> = test_crate::MyTryFrom::from[@TraitClause0_0] } fn test_crate::{impl test_crate::MyTryFrom<&'_0 (bool)> for bool}::from<'_0>(@1: &'_0 (bool)) -> core::result::Result for bool}<'_>::Error>[core::marker::Sized, core::marker::Sized<()>] @@ -36,7 +36,7 @@ impl<'_0> test_crate::{impl test_crate::MyTryFrom<&'_0 (bool)> for bool}<'_0> : parent_clause0 = core::marker::Sized<&'_ (bool)> parent_clause1 = core::marker::Sized<()> type Error = () - fn from = test_crate::{impl test_crate::MyTryFrom<&'_0 (bool)> for bool}::from + fn from = test_crate::{impl test_crate::MyTryFrom<&'_0 (bool)> for bool}::from<'_0> } fn test_crate::MyTryFrom::from(@1: T) -> core::result::Result[@TraitClause0, Self::parent_clause1] diff --git a/charon/tests/ui/rename_attribute.out b/charon/tests/ui/rename_attribute.out index 9bb4b1ee..45be93c2 100644 --- a/charon/tests/ui/rename_attribute.out +++ b/charon/tests/ui/rename_attribute.out @@ -2,8 +2,8 @@ trait test_crate::BoolTrait { - fn get_bool : test_crate::BoolTrait::get_bool - fn ret_true : test_crate::BoolTrait::ret_true + fn get_bool<'_0> = test_crate::BoolTrait::get_bool<'_0_0, Self> + fn ret_true<'_0> = test_crate::BoolTrait::ret_true<'_0_0, Self> } fn test_crate::{impl test_crate::BoolTrait for bool}::get_bool<'_0>(@1: &'_0 (bool)) -> bool @@ -17,7 +17,7 @@ fn test_crate::{impl test_crate::BoolTrait for bool}::get_bool<'_0>(@1: &'_0 (bo impl test_crate::{impl test_crate::BoolTrait for bool} : test_crate::BoolTrait { - fn get_bool = test_crate::{impl test_crate::BoolTrait for bool}::get_bool + fn get_bool<'_0> = test_crate::{impl test_crate::BoolTrait for bool}::get_bool<'_0_0> } trait core::marker::Sized diff --git a/charon/tests/ui/result-unwrap.out b/charon/tests/ui/result-unwrap.out index 99b7c288..12c61e5d 100644 --- a/charon/tests/ui/result-unwrap.out +++ b/charon/tests/ui/result-unwrap.out @@ -43,7 +43,7 @@ struct core::fmt::Error = {} trait core::fmt::Debug { - fn fmt : core::fmt::Debug::fmt + fn fmt<'_0, '_1, '_2> = core::fmt::Debug::fmt<'_0_0, '_0_1, '_0_2, Self> } fn core::result::unwrap_failed<'_0, '_1>(@1: &'_0 (Str), @2: &'_1 (dyn (exists(TODO)))) -> ! @@ -122,7 +122,7 @@ fn core::fmt::num::{impl core::fmt::Debug for u32}#86::fmt<'_0, '_1, '_2>(@1: &' impl core::fmt::num::{impl core::fmt::Debug for u32}#86 : core::fmt::Debug { - fn fmt = core::fmt::num::{impl core::fmt::Debug for u32}#86::fmt + fn fmt<'_0, '_1, '_2> = core::fmt::num::{impl core::fmt::Debug for u32}#86::fmt<'_0_0, '_0_1, '_0_2> } fn test_crate::unwrap(@1: core::result::Result[core::marker::Sized, core::marker::Sized]) -> u32 @@ -143,36 +143,36 @@ fn core::fmt::LowerHex::fmt<'_0, '_1, '_2, Self>(@1: &'_0 (Self), @2: &'_1 mut ( trait core::fmt::LowerHex { - fn fmt : core::fmt::LowerHex::fmt + fn fmt<'_0, '_1, '_2> = core::fmt::LowerHex::fmt<'_0_0, '_0_1, '_0_2, Self> } impl core::fmt::num::{impl core::fmt::LowerHex for u32}#60 : core::fmt::LowerHex { - fn fmt = core::fmt::num::{impl core::fmt::LowerHex for u32}#60::fmt + fn fmt<'_0, '_1, '_2> = core::fmt::num::{impl core::fmt::LowerHex for u32}#60::fmt<'_0_0, '_0_1, '_0_2> } fn core::fmt::Display::fmt<'_0, '_1, '_2, Self>(@1: &'_0 (Self), @2: &'_1 mut (core::fmt::Formatter<'_2>)) -> core::result::Result<(), core::fmt::Error>[core::marker::Sized<()>, core::marker::Sized] trait core::fmt::Display { - fn fmt : core::fmt::Display::fmt + fn fmt<'_0, '_1, '_2> = core::fmt::Display::fmt<'_0_0, '_0_1, '_0_2, Self> } impl core::fmt::num::imp::{impl core::fmt::Display for u32}#10 : core::fmt::Display { - fn fmt = core::fmt::num::imp::{impl core::fmt::Display for u32}#10::fmt + fn fmt<'_0, '_1, '_2> = core::fmt::num::imp::{impl core::fmt::Display for u32}#10::fmt<'_0_0, '_0_1, '_0_2> } fn core::fmt::UpperHex::fmt<'_0, '_1, '_2, Self>(@1: &'_0 (Self), @2: &'_1 mut (core::fmt::Formatter<'_2>)) -> core::result::Result<(), core::fmt::Error>[core::marker::Sized<()>, core::marker::Sized] trait core::fmt::UpperHex { - fn fmt : core::fmt::UpperHex::fmt + fn fmt<'_0, '_1, '_2> = core::fmt::UpperHex::fmt<'_0_0, '_0_1, '_0_2, Self> } impl core::fmt::num::{impl core::fmt::UpperHex for u32}#61 : core::fmt::UpperHex { - fn fmt = core::fmt::num::{impl core::fmt::UpperHex for u32}#61::fmt + fn fmt<'_0, '_1, '_2> = core::fmt::num::{impl core::fmt::UpperHex for u32}#61::fmt<'_0_0, '_0_1, '_0_2> } diff --git a/charon/tests/ui/rust-name-matcher-tests.out b/charon/tests/ui/rust-name-matcher-tests.out index 2b48d9e0..9a4dc430 100644 --- a/charon/tests/ui/rust-name-matcher-tests.out +++ b/charon/tests/ui/rust-name-matcher-tests.out @@ -16,7 +16,7 @@ trait core::marker::Sized trait test_crate::Trait { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn method : test_crate::Trait::method + fn method> = test_crate::Trait::method[@TraitClause0_0] } struct alloc::alloc::Global = {} @@ -48,7 +48,7 @@ where [@TraitClause0]: core::marker::Sized, { parent_clause0 = core::marker::Sized[@TraitClause0]> - fn method = test_crate::{impl test_crate::Trait[@TraitClause0]> for alloc::boxed::Box[core::marker::Sized]}::method + fn method> = test_crate::{impl test_crate::Trait[@TraitClause0]> for alloc::boxed::Box[core::marker::Sized]}::method[@TraitClause0, @TraitClause0_0] } fn test_crate::{impl test_crate::Trait for Slice}#1::method() @@ -70,7 +70,7 @@ where [@TraitClause0]: core::marker::Sized, { parent_clause0 = @TraitClause0 - fn method = test_crate::{impl test_crate::Trait for Slice}#1::method + fn method> = test_crate::{impl test_crate::Trait for Slice}#1::method[@TraitClause0, @TraitClause0_0] } fn test_crate::{impl test_crate::Trait for &'_0 (Slice)}#2::method<'_0, T, U>() @@ -92,7 +92,7 @@ where [@TraitClause0]: core::marker::Sized, { parent_clause0 = @TraitClause0 - fn method = test_crate::{impl test_crate::Trait for &'_0 (Slice)}#2::method + fn method> = test_crate::{impl test_crate::Trait for &'_0 (Slice)}#2::method<'_0, T, U>[@TraitClause0, @TraitClause0_0] } fn test_crate::Trait::method() diff --git a/charon/tests/ui/scopes.out b/charon/tests/ui/scopes.out index 451f4b38..342fb6a8 100644 --- a/charon/tests/ui/scopes.out +++ b/charon/tests/ui/scopes.out @@ -2,14 +2,14 @@ trait test_crate::Trait<'a, Self> { - fn method : test_crate::Trait::method + fn method<'b> = test_crate::Trait::method<'a, 'b, Self> } fn test_crate::{impl test_crate::Trait<'a> for &'a (())}::method<'a, 'b>(@1: &'b (&'a (()))) -> &'b (()) impl<'a> test_crate::{impl test_crate::Trait<'a> for &'a (())}<'a> : test_crate::Trait<'a, &'a (())> { - fn method = test_crate::{impl test_crate::Trait<'a> for &'a (())}::method + fn method<'b> = test_crate::{impl test_crate::Trait<'a> for &'a (())}::method<'a, 'b> } opaque type test_crate::Foo<'a> diff --git a/charon/tests/ui/string-literal.out b/charon/tests/ui/string-literal.out index 6ca05feb..89e3b63a 100644 --- a/charon/tests/ui/string-literal.out +++ b/charon/tests/ui/string-literal.out @@ -60,12 +60,12 @@ fn alloc::string::ToString::to_string<'_0, Self>(@1: &'_0 (Self)) -> alloc::stri trait alloc::string::ToString { - fn to_string : alloc::string::ToString::to_string + fn to_string<'_0> = alloc::string::ToString::to_string<'_0_0, Self> } impl alloc::string::{impl alloc::string::ToString for Str}#102 : alloc::string::ToString { - fn to_string = alloc::string::{impl alloc::string::ToString for Str}#102::to_string + fn to_string<'_0> = alloc::string::{impl alloc::string::ToString for Str}#102::to_string<'_0_0> } diff --git a/charon/tests/ui/trait-instance-id.out b/charon/tests/ui/trait-instance-id.out index 32cfdc21..4d4838f5 100644 --- a/charon/tests/ui/trait-instance-id.out +++ b/charon/tests/ui/trait-instance-id.out @@ -54,8 +54,8 @@ enum core::result::Result trait core::clone::Clone { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn clone : core::clone::Clone::clone - fn clone_from : core::clone::Clone::clone_from + fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self> + fn clone_from<'_0, '_1> = core::clone::Clone::clone_from<'_0_0, '_0_1, Self> } trait core::marker::Copy @@ -86,7 +86,7 @@ fn core::clone::impls::{impl core::clone::Clone for usize}#5::clone<'_0>(@1: &'_ impl core::clone::impls::{impl core::clone::Clone for usize}#5 : core::clone::Clone { parent_clause0 = core::marker::Sized - fn clone = core::clone::impls::{impl core::clone::Clone for usize}#5::clone + 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 @@ -103,7 +103,7 @@ fn core::num::nonzero::private::{impl core::clone::Clone for core::num::nonzero: 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 = core::num::nonzero::private::{impl core::clone::Clone for core::num::nonzero::private::NonZeroUsizeInner}#26::clone + 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 @@ -144,7 +144,7 @@ trait core::ops::function::FnOnce parent_clause1 : [@TraitClause1]: core::marker::Tuple parent_clause2 : [@TraitClause2]: core::marker::Sized type Output - fn call_once : core::ops::function::FnOnce::call_once + fn call_once = core::ops::function::FnOnce::call_once } trait core::ops::function::FnMut @@ -152,7 +152,7 @@ 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 : core::ops::function::FnMut::call_mut + fn call_mut<'_0> = core::ops::function::FnMut::call_mut<'_0_0, Self, Args> } opaque type core::iter::adapters::map::Map @@ -215,7 +215,7 @@ opaque type core::iter::adapters::inspect::Inspect trait core::ops::try_trait::FromResidual { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn from_residual : core::ops::try_trait::FromResidual::from_residual + fn from_residual = core::ops::try_trait::FromResidual::from_residual } enum core::ops::control_flow::ControlFlow @@ -234,8 +234,8 @@ trait core::ops::try_trait::Try parent_clause2 : [@TraitClause2]: core::marker::Sized type Output type Residual - fn from_output : core::ops::try_trait::Try::from_output - fn branch : core::ops::try_trait::Try::branch + fn from_output = core::ops::try_trait::Try::from_output + fn branch = core::ops::try_trait::Try::branch } trait core::ops::try_trait::Residual @@ -253,19 +253,19 @@ where trait core::default::Default { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn default : core::default::Default::default + fn default = core::default::Default::default } trait core::cmp::PartialEq { - fn eq : core::cmp::PartialEq::eq - fn ne : core::cmp::PartialEq::ne + fn eq<'_0, '_1> = core::cmp::PartialEq::eq<'_0_0, '_0_1, Self, Rhs> + fn ne<'_0, '_1> = core::cmp::PartialEq::ne<'_0_0, '_0_1, Self, Rhs> } trait core::cmp::Eq { parent_clause0 : [@TraitClause0]: core::cmp::PartialEq - fn assert_receiver_is_total_eq : core::cmp::Eq::assert_receiver_is_total_eq + fn assert_receiver_is_total_eq<'_0> = core::cmp::Eq::assert_receiver_is_total_eq<'_0_0, Self> } enum core::cmp::Ordering = @@ -277,21 +277,21 @@ enum core::cmp::Ordering = trait core::cmp::PartialOrd { parent_clause0 : [@TraitClause0]: core::cmp::PartialEq - fn partial_cmp : core::cmp::PartialOrd::partial_cmp - fn lt : core::cmp::PartialOrd::lt - fn le : core::cmp::PartialOrd::le - fn gt : core::cmp::PartialOrd::gt - fn ge : core::cmp::PartialOrd::ge + fn partial_cmp<'_0, '_1> = core::cmp::PartialOrd::partial_cmp<'_0_0, '_0_1, Self, Rhs> + fn lt<'_0, '_1> = core::cmp::PartialOrd::lt<'_0_0, '_0_1, Self, Rhs> + fn le<'_0, '_1> = core::cmp::PartialOrd::le<'_0_0, '_0_1, Self, Rhs> + fn gt<'_0, '_1> = core::cmp::PartialOrd::gt<'_0_0, '_0_1, Self, Rhs> + fn ge<'_0, '_1> = core::cmp::PartialOrd::ge<'_0_0, '_0_1, Self, Rhs> } trait core::cmp::Ord { parent_clause0 : [@TraitClause0]: core::cmp::Eq parent_clause1 : [@TraitClause1]: core::cmp::PartialOrd - fn cmp : core::cmp::Ord::cmp - fn max : core::cmp::Ord::max - fn min : core::cmp::Ord::min - fn clamp : core::cmp::Ord::clamp + fn cmp<'_0, '_1> = core::cmp::Ord::cmp<'_0_0, '_0_1, Self> + fn max<[@TraitClause0]: core::marker::Sized> = core::cmp::Ord::max[@TraitClause0_0] + fn min<[@TraitClause0]: core::marker::Sized> = core::cmp::Ord::min[@TraitClause0_0] + fn clamp<[@TraitClause0]: core::marker::Sized> = core::cmp::Ord::clamp[@TraitClause0_0] } opaque type core::iter::adapters::rev::Rev @@ -314,83 +314,83 @@ trait core::iter::traits::iterator::Iterator { parent_clause0 : [@TraitClause0]: core::marker::Sized type Item - fn next : core::iter::traits::iterator::Iterator::next - fn next_chunk : core::iter::traits::iterator::Iterator::next_chunk - fn size_hint : core::iter::traits::iterator::Iterator::size_hint - fn count : core::iter::traits::iterator::Iterator::count - fn last : core::iter::traits::iterator::Iterator::last - fn advance_by : core::iter::traits::iterator::Iterator::advance_by - fn nth : core::iter::traits::iterator::Iterator::nth - fn step_by : core::iter::traits::iterator::Iterator::step_by - fn chain : core::iter::traits::iterator::Iterator::chain - fn zip : core::iter::traits::iterator::Iterator::zip - fn intersperse : core::iter::traits::iterator::Iterator::intersperse - fn intersperse_with : core::iter::traits::iterator::Iterator::intersperse_with - fn map : core::iter::traits::iterator::Iterator::map - fn for_each : core::iter::traits::iterator::Iterator::for_each - fn filter : core::iter::traits::iterator::Iterator::filter - fn filter_map : core::iter::traits::iterator::Iterator::filter_map - fn enumerate : core::iter::traits::iterator::Iterator::enumerate - fn peekable : core::iter::traits::iterator::Iterator::peekable - fn skip_while : core::iter::traits::iterator::Iterator::skip_while - fn take_while : core::iter::traits::iterator::Iterator::take_while - fn map_while : core::iter::traits::iterator::Iterator::map_while - fn skip : core::iter::traits::iterator::Iterator::skip - fn take : core::iter::traits::iterator::Iterator::take - fn scan : core::iter::traits::iterator::Iterator::scan - fn flat_map : core::iter::traits::iterator::Iterator::flat_map - fn flatten : core::iter::traits::iterator::Iterator::flatten - fn map_windows : core::iter::traits::iterator::Iterator::map_windows - fn fuse : core::iter::traits::iterator::Iterator::fuse - fn inspect : core::iter::traits::iterator::Iterator::inspect - fn by_ref : core::iter::traits::iterator::Iterator::by_ref - fn collect : core::iter::traits::iterator::Iterator::collect - fn try_collect : core::iter::traits::iterator::Iterator::try_collect - fn collect_into : core::iter::traits::iterator::Iterator::collect_into - fn partition : core::iter::traits::iterator::Iterator::partition - fn partition_in_place : core::iter::traits::iterator::Iterator::partition_in_place - fn is_partitioned : core::iter::traits::iterator::Iterator::is_partitioned - fn try_fold : core::iter::traits::iterator::Iterator::try_fold - fn try_for_each : core::iter::traits::iterator::Iterator::try_for_each - fn fold : core::iter::traits::iterator::Iterator::fold - fn reduce : core::iter::traits::iterator::Iterator::reduce - fn try_reduce : core::iter::traits::iterator::Iterator::try_reduce - fn all : core::iter::traits::iterator::Iterator::all - fn any : core::iter::traits::iterator::Iterator::any - fn find : core::iter::traits::iterator::Iterator::find - fn find_map : core::iter::traits::iterator::Iterator::find_map - fn try_find : core::iter::traits::iterator::Iterator::try_find - fn position : core::iter::traits::iterator::Iterator::position - fn rposition : core::iter::traits::iterator::Iterator::rposition - fn max : core::iter::traits::iterator::Iterator::max - fn min : core::iter::traits::iterator::Iterator::min - fn max_by_key : core::iter::traits::iterator::Iterator::max_by_key - fn max_by : core::iter::traits::iterator::Iterator::max_by - fn min_by_key : core::iter::traits::iterator::Iterator::min_by_key - fn min_by : core::iter::traits::iterator::Iterator::min_by - fn rev : core::iter::traits::iterator::Iterator::rev - fn unzip : core::iter::traits::iterator::Iterator::unzip - fn copied : core::iter::traits::iterator::Iterator::copied - fn cloned : core::iter::traits::iterator::Iterator::cloned - fn cycle : core::iter::traits::iterator::Iterator::cycle - fn array_chunks : core::iter::traits::iterator::Iterator::array_chunks - fn sum : core::iter::traits::iterator::Iterator::sum - fn product : core::iter::traits::iterator::Iterator::product - fn cmp : core::iter::traits::iterator::Iterator::cmp - fn cmp_by : core::iter::traits::iterator::Iterator::cmp_by - fn partial_cmp : core::iter::traits::iterator::Iterator::partial_cmp - fn partial_cmp_by : core::iter::traits::iterator::Iterator::partial_cmp_by - fn eq : core::iter::traits::iterator::Iterator::eq - fn eq_by : core::iter::traits::iterator::Iterator::eq_by - fn ne : core::iter::traits::iterator::Iterator::ne - fn lt : core::iter::traits::iterator::Iterator::lt - fn le : core::iter::traits::iterator::Iterator::le - fn gt : core::iter::traits::iterator::Iterator::gt - fn ge : core::iter::traits::iterator::Iterator::ge - fn is_sorted : core::iter::traits::iterator::Iterator::is_sorted - fn is_sorted_by : core::iter::traits::iterator::Iterator::is_sorted_by - fn is_sorted_by_key : core::iter::traits::iterator::Iterator::is_sorted_by_key - fn __iterator_get_unchecked : core::iter::traits::iterator::Iterator::__iterator_get_unchecked + fn next<'_0> = core::iter::traits::iterator::Iterator::next<'_0_0, 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>[@TraitClause0_0] + fn size_hint<'_0> = core::iter::traits::iterator::Iterator::size_hint<'_0_0, Self> + fn count<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::count[@TraitClause0_0] + fn last<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::last[@TraitClause0_0] + fn advance_by<'_0> = core::iter::traits::iterator::Iterator::advance_by<'_0_0, Self> + fn nth<'_0> = core::iter::traits::iterator::Iterator::nth<'_0_0, Self> + fn step_by<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::step_by[@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[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn zip, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::iter::traits::collect::IntoIterator> = core::iter::traits::iterator::Iterator::zip[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn intersperse<[@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::clone::Clone> = core::iter::traits::iterator::Iterator::intersperse[@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[@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[@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[@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[@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[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn enumerate<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::enumerate[@TraitClause0_0] + fn peekable<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::peekable[@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[@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[@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[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn skip<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::skip[@TraitClause0_0] + fn take<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::take[@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[@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[@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[@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[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn fuse<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::fuse[@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[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn by_ref<'_0, [@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::by_ref<'_0_0, Self>[@TraitClause0_0] + fn collect, [@TraitClause1]: core::iter::traits::collect::FromIterator, [@TraitClause2]: core::marker::Sized> = core::iter::traits::iterator::Iterator::collect[@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>[@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>[@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[@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>[@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[@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>[@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>[@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[@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[@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>[@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>[@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>[@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>[@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>[@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>[@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>[@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>[@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[@TraitClause0_0, @TraitClause0_1] + fn min<[@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::cmp::Ord> = core::iter::traits::iterator::Iterator::min[@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[@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[@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[@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[@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[@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[@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>[@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>[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn cycle<[@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::clone::Clone> = core::iter::traits::iterator::Iterator::cycle[@TraitClause0_0, @TraitClause0_1] + fn array_chunks> = core::iter::traits::iterator::Iterator::array_chunks[@TraitClause0_0] + fn sum, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::iter::traits::accum::Sum> = core::iter::traits::iterator::Iterator::sum[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn product, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::iter::traits::accum::Product> = core::iter::traits::iterator::Iterator::product[@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[@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[@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[@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[@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[@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[@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[@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[@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[@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[@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[@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[@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[@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[@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>[@TraitClause0_0] } trait core::iter::traits::collect::IntoIterator @@ -402,7 +402,7 @@ where parent_clause2 : [@TraitClause2]: core::marker::Sized type Item type IntoIter - fn into_iter : core::iter::traits::collect::IntoIterator::into_iter + fn into_iter = core::iter::traits::collect::IntoIterator::into_iter } opaque type core::iter::adapters::intersperse::Intersperse @@ -445,34 +445,34 @@ trait core::iter::traits::collect::FromIterator { parent_clause0 : [@TraitClause0]: core::marker::Sized parent_clause1 : [@TraitClause1]: core::marker::Sized - fn from_iter : core::iter::traits::collect::FromIterator::from_iter + fn from_iter, [@TraitClause1]: core::iter::traits::collect::IntoIterator, @TraitClause1_1::Item = A> = core::iter::traits::collect::FromIterator::from_iter[@TraitClause0_0, @TraitClause0_1] } trait core::iter::traits::collect::Extend { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn extend : core::iter::traits::collect::Extend::extend - fn extend_one : core::iter::traits::collect::Extend::extend_one - fn extend_reserve : core::iter::traits::collect::Extend::extend_reserve - fn extend_one_unchecked : core::iter::traits::collect::Extend::extend_one_unchecked + 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>[@TraitClause0_0, @TraitClause0_1] + fn extend_one<'_0> = core::iter::traits::collect::Extend::extend_one<'_0_0, Self, A> + fn extend_reserve<'_0> = core::iter::traits::collect::Extend::extend_reserve<'_0_0, Self, A> + fn extend_one_unchecked<'_0, [@TraitClause0]: core::marker::Sized> = core::iter::traits::collect::Extend::extend_one_unchecked<'_0_0, Self, A>[@TraitClause0_0] } trait core::iter::traits::double_ended::DoubleEndedIterator { parent_clause0 : [@TraitClause0]: core::iter::traits::iterator::Iterator - fn next_back : core::iter::traits::double_ended::DoubleEndedIterator::next_back - fn advance_back_by : core::iter::traits::double_ended::DoubleEndedIterator::advance_back_by - fn nth_back : core::iter::traits::double_ended::DoubleEndedIterator::nth_back - fn try_rfold : core::iter::traits::double_ended::DoubleEndedIterator::try_rfold - fn rfold : core::iter::traits::double_ended::DoubleEndedIterator::rfold - fn rfind : core::iter::traits::double_ended::DoubleEndedIterator::rfind + fn next_back<'_0> = core::iter::traits::double_ended::DoubleEndedIterator::next_back<'_0_0, Self> + fn advance_back_by<'_0> = core::iter::traits::double_ended::DoubleEndedIterator::advance_back_by<'_0_0, Self> + fn nth_back<'_0> = core::iter::traits::double_ended::DoubleEndedIterator::nth_back<'_0_0, 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>[@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[@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>[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2] } trait core::iter::traits::exact_size::ExactSizeIterator { parent_clause0 : [@TraitClause0]: core::iter::traits::iterator::Iterator - fn len : core::iter::traits::exact_size::ExactSizeIterator::len - fn is_empty : core::iter::traits::exact_size::ExactSizeIterator::is_empty + fn len<'_0> = core::iter::traits::exact_size::ExactSizeIterator::len<'_0_0, Self> + fn is_empty<'_0> = core::iter::traits::exact_size::ExactSizeIterator::is_empty<'_0_0, Self> } opaque type core::iter::adapters::array_chunks::ArrayChunks @@ -484,21 +484,21 @@ trait core::iter::traits::accum::Sum { parent_clause0 : [@TraitClause0]: core::marker::Sized parent_clause1 : [@TraitClause1]: core::marker::Sized - fn sum : core::iter::traits::accum::Sum::sum + fn sum, [@TraitClause1]: core::iter::traits::iterator::Iterator, @TraitClause1_1::Item = A> = core::iter::traits::accum::Sum::sum[@TraitClause0_0, @TraitClause0_1] } trait core::iter::traits::accum::Product { parent_clause0 : [@TraitClause0]: core::marker::Sized parent_clause1 : [@TraitClause1]: core::marker::Sized - fn product : core::iter::traits::accum::Product::product + fn product, [@TraitClause1]: core::iter::traits::iterator::Iterator, @TraitClause1_1::Item = A> = core::iter::traits::accum::Product::product[@TraitClause0_0, @TraitClause0_1] } trait core::iter::adapters::zip::TrustedRandomAccessNoCoerce { parent_clause0 : [@TraitClause0]: core::marker::Sized const MAY_HAVE_SIDE_EFFECT : bool - fn size : core::iter::adapters::zip::TrustedRandomAccessNoCoerce::size + fn size<'_0, [@TraitClause0]: core::iter::traits::iterator::Iterator> = core::iter::adapters::zip::TrustedRandomAccessNoCoerce::size<'_0_0, 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 @@ -548,13 +548,13 @@ where { parent_clause0 = @TraitClause0 type Item = T - fn next = core::array::iter::{impl core::iter::traits::iterator::Iterator for core::array::iter::IntoIter[@TraitClause0]}#2::next - fn size_hint = core::array::iter::{impl core::iter::traits::iterator::Iterator for core::array::iter::IntoIter[@TraitClause0]}#2::size_hint - fn count = core::array::iter::{impl core::iter::traits::iterator::Iterator for core::array::iter::IntoIter[@TraitClause0]}#2::count - fn last = core::array::iter::{impl core::iter::traits::iterator::Iterator for core::array::iter::IntoIter[@TraitClause0]}#2::last - fn advance_by = core::array::iter::{impl core::iter::traits::iterator::Iterator for core::array::iter::IntoIter[@TraitClause0]}#2::advance_by - fn fold = core::array::iter::{impl core::iter::traits::iterator::Iterator for core::array::iter::IntoIter[@TraitClause0]}#2::fold - fn __iterator_get_unchecked = core::array::iter::{impl core::iter::traits::iterator::Iterator for core::array::iter::IntoIter[@TraitClause0]}#2::__iterator_get_unchecked + 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] @@ -670,22 +670,22 @@ where { parent_clause0 = core::marker::Sized<&'_ (T)> type Item = &'a (T) - fn next = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::next - fn size_hint = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::size_hint - fn count = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::count - fn last = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::last - fn advance_by = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::advance_by - fn nth = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::nth - fn for_each = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::for_each - fn fold = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::fold - fn all = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::all - fn any = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::any - fn find = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::find - fn find_map = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::find_map - fn position = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::position - fn rposition = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::rposition - fn is_sorted_by = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::is_sorted_by - fn __iterator_get_unchecked = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::__iterator_get_unchecked + 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)) @@ -724,12 +724,12 @@ where { parent_clause0 = core::marker::Sized<&'_ (Slice)> type Item = &'a (Slice) - fn next = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Chunks<'a, T>[@TraitClause0]}#71::next - fn size_hint = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Chunks<'a, T>[@TraitClause0]}#71::size_hint - fn count = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Chunks<'a, T>[@TraitClause0]}#71::count - fn last = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Chunks<'a, T>[@TraitClause0]}#71::last - fn nth = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Chunks<'a, T>[@TraitClause0]}#71::nth - fn __iterator_get_unchecked = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Chunks<'a, T>[@TraitClause0]}#71::__iterator_get_unchecked + 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] @@ -766,12 +766,12 @@ where { parent_clause0 = core::marker::Sized<&'_ (Slice)> type Item = &'a (Slice) - fn next = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::ChunksExact<'a, T>[@TraitClause0]}#90::next - fn size_hint = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::ChunksExact<'a, T>[@TraitClause0]}#90::size_hint - fn count = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::ChunksExact<'a, T>[@TraitClause0]}#90::count - fn last = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::ChunksExact<'a, T>[@TraitClause0]}#90::last - fn nth = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::ChunksExact<'a, T>[@TraitClause0]}#90::nth - fn __iterator_get_unchecked = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::ChunksExact<'a, T>[@TraitClause0]}#90::__iterator_get_unchecked + 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() @@ -1089,7 +1089,7 @@ where 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 + 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 @@ -1102,7 +1102,7 @@ where 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 + 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[Self::parent_clause0] @@ -1112,13 +1112,13 @@ fn core::ops::arith::AddAssign::add_assign<'_0, Self, Rhs>(@1: &'_0 mut (Self), trait core::ops::arith::AddAssign { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn add_assign : core::ops::arith::AddAssign::add_assign + fn add_assign<'_0> = core::ops::arith::AddAssign::add_assign<'_0_0, Self, Rhs> } 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 = core::ops::arith::{impl core::ops::arith::AddAssign<&'_0 (i32)> for i32}#365::add_assign + 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[Self::parent_clause0]>[core::marker::Sized>, core::marker::Sized[Self::parent_clause0]>] @@ -1650,11 +1650,37 @@ unsafe fn core::iter::traits::iterator::Iterator::__iterator_get_unchecked<'_0, where [@TraitClause0]: core::iter::adapters::zip::TrustedRandomAccessNoCoerce, -fn core::iter::traits::collect::FromIterator::from_iter(@1: T) -> Self +fn core::cmp::PartialEq::eq<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool + +fn core::cmp::PartialEq::ne<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool + +fn core::cmp::Ord::cmp<'_0, '_1, Self>(@1: &'_0 (Self), @2: &'_1 (Self)) -> core::cmp::Ordering + +fn core::cmp::Ord::max(@1: Self, @2: Self) -> Self where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::iter::traits::collect::IntoIterator, - @TraitClause1::Item = A, + [@TraitClause0]: core::marker::Sized, + +fn core::cmp::Ord::min(@1: Self, @2: Self) -> Self +where + [@TraitClause0]: core::marker::Sized, + +fn core::cmp::Ord::clamp(@1: Self, @2: Self, @3: Self) -> Self +where + [@TraitClause0]: core::marker::Sized, + +fn core::cmp::Eq::assert_receiver_is_total_eq<'_0, Self>(@1: &'_0 (Self)) + +fn core::cmp::PartialOrd::partial_cmp<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> core::option::Option[core::marker::Sized] + +fn core::cmp::PartialOrd::lt<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool + +fn core::cmp::PartialOrd::le<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool + +fn core::cmp::PartialOrd::gt<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool + +fn core::cmp::PartialOrd::ge<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool + +fn core::default::Default::default() -> Self fn core::ops::try_trait::Try::from_output(@1: Self::Output) -> Self @@ -1662,6 +1688,28 @@ fn core::ops::try_trait::Try::branch(@1: Self) -> core::ops::control_flow: fn core::ops::try_trait::FromResidual::from_residual(@1: R) -> Self +fn core::iter::adapters::zip::TrustedRandomAccessNoCoerce::size<'_0, Self>(@1: &'_0 (Self)) -> usize +where + [@TraitClause0]: core::iter::traits::iterator::Iterator, + +fn core::iter::traits::accum::Sum::sum(@1: I) -> Self +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::iter::traits::iterator::Iterator, + @TraitClause1::Item = A, + +fn core::iter::traits::accum::Product::product(@1: I) -> Self +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::iter::traits::iterator::Iterator, + @TraitClause1::Item = A, + +fn core::iter::traits::collect::FromIterator::from_iter(@1: T) -> Self +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::iter::traits::collect::IntoIterator, + @TraitClause1::Item = A, + fn core::iter::traits::collect::Extend::extend<'_0, Self, A, T>(@1: &'_0 mut (Self), @2: T) where [@TraitClause0]: core::marker::Sized, @@ -1676,8 +1724,6 @@ unsafe fn core::iter::traits::collect::Extend::extend_one_unchecked<'_0, Self, A where [@TraitClause0]: core::marker::Sized, -fn core::default::Default::default() -> Self - fn core::iter::traits::double_ended::DoubleEndedIterator::next_back<'_0, Self>(@1: &'_0 mut (Self)) -> core::option::Option[Self::parent_clause0::parent_clause0] 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]>] @@ -1714,51 +1760,5 @@ fn core::iter::traits::exact_size::ExactSizeIterator::len<'_0, Self>(@1: &'_0 (S fn core::iter::traits::exact_size::ExactSizeIterator::is_empty<'_0, Self>(@1: &'_0 (Self)) -> bool -fn core::cmp::Ord::cmp<'_0, '_1, Self>(@1: &'_0 (Self), @2: &'_1 (Self)) -> core::cmp::Ordering - -fn core::cmp::Ord::max(@1: Self, @2: Self) -> Self -where - [@TraitClause0]: core::marker::Sized, - -fn core::cmp::Ord::min(@1: Self, @2: Self) -> Self -where - [@TraitClause0]: core::marker::Sized, - -fn core::cmp::Ord::clamp(@1: Self, @2: Self, @3: Self) -> Self -where - [@TraitClause0]: core::marker::Sized, - -fn core::cmp::Eq::assert_receiver_is_total_eq<'_0, Self>(@1: &'_0 (Self)) - -fn core::cmp::PartialEq::eq<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool - -fn core::cmp::PartialEq::ne<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool - -fn core::cmp::PartialOrd::partial_cmp<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> core::option::Option[core::marker::Sized] - -fn core::cmp::PartialOrd::lt<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool - -fn core::cmp::PartialOrd::le<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool - -fn core::cmp::PartialOrd::gt<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool - -fn core::cmp::PartialOrd::ge<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool - -fn core::iter::traits::accum::Sum::sum(@1: I) -> Self -where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::iter::traits::iterator::Iterator, - @TraitClause1::Item = A, - -fn core::iter::traits::accum::Product::product(@1: I) -> Self -where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::iter::traits::iterator::Iterator, - @TraitClause1::Item = A, - -fn core::iter::adapters::zip::TrustedRandomAccessNoCoerce::size<'_0, Self>(@1: &'_0 (Self)) -> usize -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, - diff --git a/charon/tests/ui/traits.out b/charon/tests/ui/traits.out index ad331970..75569160 100644 --- a/charon/tests/ui/traits.out +++ b/charon/tests/ui/traits.out @@ -2,8 +2,8 @@ trait test_crate::BoolTrait { - fn get_bool : test_crate::BoolTrait::get_bool - fn ret_true : test_crate::BoolTrait::ret_true + fn get_bool<'_0> = test_crate::BoolTrait::get_bool<'_0_0, Self> + fn ret_true<'_0> = test_crate::BoolTrait::ret_true<'_0_0, Self> } fn test_crate::{impl test_crate::BoolTrait for bool}::get_bool<'_0>(@1: &'_0 (bool)) -> bool @@ -17,7 +17,7 @@ fn test_crate::{impl test_crate::BoolTrait for bool}::get_bool<'_0>(@1: &'_0 (bo impl test_crate::{impl test_crate::BoolTrait for bool} : test_crate::BoolTrait { - fn get_bool = test_crate::{impl test_crate::BoolTrait for bool}::get_bool + fn get_bool<'_0> = test_crate::{impl test_crate::BoolTrait for bool}::get_bool<'_0_0> } fn test_crate::BoolTrait::ret_true<'_0, Self>(@1: &'_0 (Self)) -> bool @@ -87,7 +87,7 @@ impl test_crate::{impl test_crate::BoolTrait for core::option::Option[@Tra where [@TraitClause0]: core::marker::Sized, { - fn get_bool = test_crate::{impl test_crate::BoolTrait for core::option::Option[@TraitClause0]}#1::get_bool + fn get_bool<'_0> = test_crate::{impl test_crate::BoolTrait for core::option::Option[@TraitClause0]}#1::get_bool<'_0_0, T>[@TraitClause0] } fn test_crate::test_bool_trait_option(@1: core::option::Option[@TraitClause0]) -> bool @@ -137,7 +137,7 @@ where trait test_crate::ToU64 { - fn to_u64 : test_crate::ToU64::to_u64 + fn to_u64 = test_crate::ToU64::to_u64 } fn test_crate::{impl test_crate::ToU64 for u64}#2::to_u64(@1: u64) -> u64 @@ -186,7 +186,7 @@ where [@TraitClause0]: core::marker::Sized, [@TraitClause1]: test_crate::ToU64, { - fn to_u64 = test_crate::{impl test_crate::ToU64 for (A, A)}#3::to_u64 + fn to_u64 = test_crate::{impl test_crate::ToU64 for (A, A)}#3::to_u64[@TraitClause0, @TraitClause1] } fn test_crate::f(@1: (T, T)) -> u64 @@ -262,7 +262,7 @@ where [@TraitClause0]: core::marker::Sized, [@TraitClause1]: test_crate::ToU64, { - fn to_u64 = test_crate::{impl test_crate::ToU64 for test_crate::Wrapper[@TraitClause0]}#4::to_u64 + fn to_u64 = test_crate::{impl test_crate::ToU64 for test_crate::Wrapper[@TraitClause0]}#4::to_u64[@TraitClause0, @TraitClause1] } fn test_crate::h1(@1: test_crate::Wrapper[core::marker::Sized]) -> u64 @@ -296,7 +296,7 @@ where trait test_crate::ToType { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn to_type : test_crate::ToType::to_type + fn to_type = test_crate::ToType::to_type } fn test_crate::{impl test_crate::ToType for u64}#5::to_type(@1: u64) -> bool @@ -319,7 +319,7 @@ impl test_crate::{impl test_crate::ToType for u64}#5 : test_crate::ToType< trait test_crate::OfType { - fn of_type : test_crate::OfType::of_type + fn of_type, [@TraitClause1]: test_crate::ToType, [@TraitClause2]: core::marker::Sized> = test_crate::OfType::of_type[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2] } fn test_crate::OfType::of_type(@1: T) -> Self @@ -351,7 +351,7 @@ trait test_crate::OfTypeBis parent_clause0 : [@TraitClause0]: core::marker::Sized parent_clause1 : [@TraitClause1]: test_crate::ToType parent_clause2 : [@TraitClause2]: core::marker::Sized - fn of_type : test_crate::OfTypeBis::of_type + fn of_type<[@TraitClause0]: core::marker::Sized> = test_crate::OfTypeBis::of_type[@TraitClause0_0] } fn test_crate::OfTypeBis::of_type(@1: T) -> Self @@ -474,7 +474,7 @@ where [@TraitClause1]: test_crate::ToType, { parent_clause0 = @TraitClause0 - fn to_type = test_crate::{impl test_crate::ToType for test_crate::BoolWrapper}#7::to_type + fn to_type = test_crate::{impl test_crate::ToType for test_crate::BoolWrapper}#7::to_type[@TraitClause0, @TraitClause1] } fn test_crate::WithConstTy::LEN2() -> usize @@ -496,7 +496,7 @@ trait test_crate::WithConstTy const LEN2 : usize type V type W - fn f : test_crate::WithConstTy::f + fn f<'_0, '_1> = test_crate::WithConstTy::f<'_0_0, '_0_1, Self, const LEN : usize> } fn test_crate::{impl test_crate::WithConstTy<32 : usize> for bool}#8::LEN1() -> usize @@ -531,7 +531,7 @@ impl test_crate::{impl test_crate::WithConstTy<32 : usize> for bool}#8 : test_cr const LEN2 = test_crate::WithConstTy::LEN2 type V = u8 type W = u64 - fn f = test_crate::{impl test_crate::WithConstTy<32 : usize> for bool}#8::f + fn f<'_0, '_1> = test_crate::{impl test_crate::WithConstTy<32 : usize> for bool}#8::f<'_0_0, '_0_1> } fn test_crate::use_with_const_ty1() -> usize @@ -614,8 +614,8 @@ trait test_crate::ParentTrait0 { parent_clause0 : [@TraitClause0]: core::marker::Sized type W - fn get_name : test_crate::ParentTrait0::get_name - fn get_w : test_crate::ParentTrait0::get_w + fn get_name<'_0> = test_crate::ParentTrait0::get_name<'_0_0, Self> + fn get_w<'_0> = test_crate::ParentTrait0::get_w<'_0_0, Self> } trait test_crate::ParentTrait1 @@ -704,7 +704,7 @@ where parent_clause2 : [@TraitClause2]: core::marker::Sized type Item type IntoIter - fn into_iter : test_crate::IntoIterator::into_iter + fn into_iter = test_crate::IntoIterator::into_iter } trait test_crate::FromResidual @@ -735,7 +735,7 @@ trait test_crate::ParentTrait2 trait test_crate::ChildTrait2 { parent_clause0 : [@TraitClause0]: test_crate::ParentTrait2 - fn convert : test_crate::ChildTrait2::convert + fn convert = test_crate::ChildTrait2::convert } impl test_crate::{impl test_crate::WithTarget for u32}#11 : test_crate::WithTarget @@ -771,28 +771,28 @@ trait test_crate::CFnOnce parent_clause0 : [@TraitClause0]: core::marker::Sized parent_clause1 : [@TraitClause1]: core::marker::Sized type Output - fn call_once : test_crate::CFnOnce::call_once + fn call_once = test_crate::CFnOnce::call_once } trait test_crate::CFnMut { parent_clause0 : [@TraitClause0]: test_crate::CFnOnce parent_clause1 : [@TraitClause1]: core::marker::Sized - fn call_mut : test_crate::CFnMut::call_mut + fn call_mut<'_0> = test_crate::CFnMut::call_mut<'_0_0, Self, Args> } trait test_crate::CFn { parent_clause0 : [@TraitClause0]: test_crate::CFnMut parent_clause1 : [@TraitClause1]: core::marker::Sized - fn call : test_crate::CFn::call + fn call<'_0> = test_crate::CFn::call<'_0_0, Self, Args> } trait test_crate::GetTrait { parent_clause0 : [@TraitClause0]: core::marker::Sized type W - fn get_w : test_crate::GetTrait::get_w + fn get_w<'_0> = test_crate::GetTrait::get_w<'_0_0, Self> } fn test_crate::GetTrait::get_w<'_0, Self>(@1: &'_0 (Self)) -> Self::W @@ -971,7 +971,7 @@ trait core::ops::function::FnOnce parent_clause1 : [@TraitClause1]: core::marker::Tuple parent_clause2 : [@TraitClause2]: core::marker::Sized type Output - fn call_once : core::ops::function::FnOnce::call_once + fn call_once = core::ops::function::FnOnce::call_once } trait core::ops::function::FnMut @@ -979,7 +979,7 @@ 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 : core::ops::function::FnMut::call_mut + fn call_mut<'_0> = core::ops::function::FnMut::call_mut<'_0_0, Self, Args> } trait core::ops::function::Fn @@ -987,7 +987,7 @@ trait core::ops::function::Fn parent_clause0 : [@TraitClause0]: core::ops::function::FnMut parent_clause1 : [@TraitClause1]: core::marker::Sized parent_clause2 : [@TraitClause2]: core::marker::Tuple - fn call : core::ops::function::Fn::call + fn call<'_0> = core::ops::function::Fn::call<'_0_0, Self, Args> } fn test_crate::call<'a, F>(@1: F) @@ -1041,12 +1041,12 @@ fn test_crate::{test_crate::TestType[@TraitClause0]}#6::test::TestTrait::test trait test_crate::{test_crate::TestType[@TraitClause0]}#6::test::TestTrait { - fn test : test_crate::{test_crate::TestType[@TraitClause0]}#6::test::TestTrait::test + fn test<'_0> = test_crate::{test_crate::TestType[@TraitClause0]}#6::test::TestTrait::test<'_0_0, Self> } impl test_crate::{test_crate::TestType[@TraitClause0]}#6::test::{impl test_crate::{test_crate::TestType[@TraitClause0]}#6::test::TestTrait for test_crate::{test_crate::TestType[@TraitClause0]}#6::test::TestType1} : test_crate::{test_crate::TestType[@TraitClause0]}#6::test::TestTrait[@TraitClause0]}#6::test::TestType1> { - fn test = test_crate::{test_crate::TestType[@TraitClause0]}#6::test::{impl test_crate::{test_crate::TestType[@TraitClause0]}#6::test::TestTrait for test_crate::{test_crate::TestType[@TraitClause0]}#6::test::TestType1}::test + fn test<'_0> = test_crate::{test_crate::TestType[@TraitClause0]}#6::test::{impl test_crate::{test_crate::TestType[@TraitClause0]}#6::test::TestTrait for test_crate::{test_crate::TestType[@TraitClause0]}#6::test::TestType1}::test<'_0_0> } fn test_crate::WithConstTy::f<'_0, '_1, Self, const LEN : usize>(@1: &'_0 mut (Self::W), @2: &'_1 (Array)) diff --git a/charon/tests/ui/traits_special.out b/charon/tests/ui/traits_special.out index 19d23707..2aa0f9a0 100644 --- a/charon/tests/ui/traits_special.out +++ b/charon/tests/ui/traits_special.out @@ -16,7 +16,7 @@ trait test_crate::From parent_clause0 : [@TraitClause0]: core::marker::Sized parent_clause1 : [@TraitClause1]: core::marker::Sized type Error - fn from : test_crate::From::from + fn from<[@TraitClause0]: core::marker::Sized> = test_crate::From::from[@TraitClause0_0] } fn test_crate::{impl test_crate::From<&'_0 (bool)> for bool}::from<'_0>(@1: &'_0 (bool)) -> core::result::Result for bool}<'_>::Error>[core::marker::Sized, core::marker::Sized<()>] @@ -36,7 +36,7 @@ impl<'_0> test_crate::{impl test_crate::From<&'_0 (bool)> for bool}<'_0> : test_ parent_clause0 = core::marker::Sized<&'_ (bool)> parent_clause1 = core::marker::Sized<()> type Error = () - fn from = test_crate::{impl test_crate::From<&'_0 (bool)> for bool}::from + fn from = test_crate::{impl test_crate::From<&'_0 (bool)> for bool}::from<'_0> } fn test_crate::From::from(@1: T) -> core::result::Result[@TraitClause0, Self::parent_clause1] diff --git a/charon/tests/ui/type_alias.out b/charon/tests/ui/type_alias.out index 51e342cc..55970f58 100644 --- a/charon/tests/ui/type_alias.out +++ b/charon/tests/ui/type_alias.out @@ -11,13 +11,13 @@ type test_crate::Generic<'a, T> trait core::clone::Clone { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn clone : core::clone::Clone::clone - fn clone_from : core::clone::Clone::clone_from + fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self> + fn clone_from<'_0, '_1> = core::clone::Clone::clone_from<'_0_0, '_0_1, Self> } trait core::borrow::Borrow { - fn borrow : core::borrow::Borrow::borrow + fn borrow<'_0> = core::borrow::Borrow::borrow<'_0_0, Self, Borrowed> } trait alloc::borrow::ToOwned @@ -25,8 +25,8 @@ trait alloc::borrow::ToOwned parent_clause0 : [@TraitClause0]: core::borrow::Borrow parent_clause1 : [@TraitClause1]: core::marker::Sized type Owned - fn to_owned : alloc::borrow::ToOwned::to_owned - fn clone_into : alloc::borrow::ToOwned::clone_into + fn to_owned<'_0> = alloc::borrow::ToOwned::to_owned<'_0_0, Self> + fn clone_into<'_0, '_1> = alloc::borrow::ToOwned::clone_into<'_0_0, '_0_1, Self> } enum alloc::borrow::Cow<'a, B> @@ -54,7 +54,7 @@ where [@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::marker::Sized, { - fn borrow = alloc::slice::{impl core::borrow::Borrow> for alloc::vec::Vec[@TraitClause0, @TraitClause1]}#5::borrow + fn borrow<'_0> = alloc::slice::{impl core::borrow::Borrow> for alloc::vec::Vec[@TraitClause0, @TraitClause1]}#5::borrow<'_0_0, T, A>[@TraitClause0, @TraitClause1] } struct alloc::alloc::Global = {} @@ -77,8 +77,8 @@ where parent_clause0 = alloc::slice::{impl core::borrow::Borrow> for alloc::vec::Vec[@TraitClause0, @TraitClause1]}#5[@TraitClause0, core::marker::Sized] parent_clause1 = core::marker::Sized[@TraitClause0, core::marker::Sized]> type Owned = alloc::vec::Vec[@TraitClause0, core::marker::Sized] - fn to_owned = alloc::slice::{impl alloc::borrow::ToOwned for Slice}#9::to_owned - fn clone_into = alloc::slice::{impl alloc::borrow::ToOwned for Slice}#9::clone_into + fn to_owned<'_0> = alloc::slice::{impl alloc::borrow::ToOwned for Slice}#9::to_owned<'_0_0, T>[@TraitClause0, @TraitClause1] + fn clone_into<'_0, '_1> = alloc::slice::{impl alloc::borrow::ToOwned for Slice}#9::clone_into<'_0_0, '_0_1, T>[@TraitClause0, @TraitClause1] } type test_crate::Generic2<'a, T> diff --git a/charon/tests/ui/unsize.out b/charon/tests/ui/unsize.out index 695b8434..e05f1ff0 100644 --- a/charon/tests/ui/unsize.out +++ b/charon/tests/ui/unsize.out @@ -117,8 +117,8 @@ fn core::clone::Clone::clone<'_0, Self>(@1: &'_0 (Self)) -> Self trait core::clone::Clone { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn clone : core::clone::Clone::clone - fn clone_from : core::clone::Clone::clone_from + fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self> + fn clone_from<'_0, '_1> = core::clone::Clone::clone_from<'_0_0, '_0_1, Self> } fn alloc::string::{impl core::clone::Clone for alloc::string::String}#6::clone_from<'_0, '_1>(@1: &'_0 mut (alloc::string::String), @2: &'_1 (alloc::string::String)) @@ -126,8 +126,8 @@ fn alloc::string::{impl core::clone::Clone for alloc::string::String}#6::clone_f impl alloc::string::{impl core::clone::Clone for alloc::string::String}#6 : core::clone::Clone { parent_clause0 = core::marker::Sized - fn clone = alloc::string::{impl core::clone::Clone for alloc::string::String}#6::clone - fn clone_from = alloc::string::{impl core::clone::Clone for alloc::string::String}#6::clone_from + fn clone<'_0> = alloc::string::{impl core::clone::Clone for alloc::string::String}#6::clone<'_0_0> + fn clone_from<'_0, '_1> = alloc::string::{impl core::clone::Clone for alloc::string::String}#6::clone_from<'_0_0, '_0_1> } fn core::clone::Clone::clone_from<'_0, '_1, Self>(@1: &'_0 mut (Self), @2: &'_1 (Self)) diff --git a/charon/tests/ui/unsupported/issue-79-bound-regions.out b/charon/tests/ui/unsupported/issue-79-bound-regions.out index 02666cf4..a50e3c01 100644 --- a/charon/tests/ui/unsupported/issue-79-bound-regions.out +++ b/charon/tests/ui/unsupported/issue-79-bound-regions.out @@ -79,8 +79,8 @@ opaque type core::array::iter::IntoIter trait core::clone::Clone { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn clone : core::clone::Clone::clone - fn clone_from : core::clone::Clone::clone_from + fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self> + fn clone_from<'_0, '_1> = core::clone::Clone::clone_from<'_0_0, '_0_1, Self> } trait core::marker::Copy @@ -111,7 +111,7 @@ fn core::clone::impls::{impl core::clone::Clone for usize}#5::clone<'_0>(@1: &'_ impl core::clone::impls::{impl core::clone::Clone for usize}#5 : core::clone::Clone { parent_clause0 = core::marker::Sized - fn clone = core::clone::impls::{impl core::clone::Clone for usize}#5::clone + 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 @@ -128,7 +128,7 @@ fn core::num::nonzero::private::{impl core::clone::Clone for core::num::nonzero: 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 = core::num::nonzero::private::{impl core::clone::Clone for core::num::nonzero::private::NonZeroUsizeInner}#26::clone + 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 @@ -169,7 +169,7 @@ trait core::ops::function::FnOnce parent_clause1 : [@TraitClause1]: core::marker::Tuple parent_clause2 : [@TraitClause2]: core::marker::Sized type Output - fn call_once : core::ops::function::FnOnce::call_once + fn call_once = core::ops::function::FnOnce::call_once } trait core::ops::function::FnMut @@ -177,7 +177,7 @@ 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 : core::ops::function::FnMut::call_mut + fn call_mut<'_0> = core::ops::function::FnMut::call_mut<'_0_0, Self, Args> } opaque type core::iter::adapters::map::Map @@ -240,7 +240,7 @@ opaque type core::iter::adapters::inspect::Inspect trait core::ops::try_trait::FromResidual { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn from_residual : core::ops::try_trait::FromResidual::from_residual + fn from_residual = core::ops::try_trait::FromResidual::from_residual } enum core::ops::control_flow::ControlFlow @@ -259,8 +259,8 @@ trait core::ops::try_trait::Try parent_clause2 : [@TraitClause2]: core::marker::Sized type Output type Residual - fn from_output : core::ops::try_trait::Try::from_output - fn branch : core::ops::try_trait::Try::branch + fn from_output = core::ops::try_trait::Try::from_output + fn branch = core::ops::try_trait::Try::branch } trait core::ops::try_trait::Residual @@ -278,19 +278,19 @@ where trait core::default::Default { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn default : core::default::Default::default + fn default = core::default::Default::default } trait core::cmp::PartialEq { - fn eq : core::cmp::PartialEq::eq - fn ne : core::cmp::PartialEq::ne + fn eq<'_0, '_1> = core::cmp::PartialEq::eq<'_0_0, '_0_1, Self, Rhs> + fn ne<'_0, '_1> = core::cmp::PartialEq::ne<'_0_0, '_0_1, Self, Rhs> } trait core::cmp::Eq { parent_clause0 : [@TraitClause0]: core::cmp::PartialEq - fn assert_receiver_is_total_eq : core::cmp::Eq::assert_receiver_is_total_eq + fn assert_receiver_is_total_eq<'_0> = core::cmp::Eq::assert_receiver_is_total_eq<'_0_0, Self> } enum core::cmp::Ordering = @@ -302,21 +302,21 @@ enum core::cmp::Ordering = trait core::cmp::PartialOrd { parent_clause0 : [@TraitClause0]: core::cmp::PartialEq - fn partial_cmp : core::cmp::PartialOrd::partial_cmp - fn lt : core::cmp::PartialOrd::lt - fn le : core::cmp::PartialOrd::le - fn gt : core::cmp::PartialOrd::gt - fn ge : core::cmp::PartialOrd::ge + fn partial_cmp<'_0, '_1> = core::cmp::PartialOrd::partial_cmp<'_0_0, '_0_1, Self, Rhs> + fn lt<'_0, '_1> = core::cmp::PartialOrd::lt<'_0_0, '_0_1, Self, Rhs> + fn le<'_0, '_1> = core::cmp::PartialOrd::le<'_0_0, '_0_1, Self, Rhs> + fn gt<'_0, '_1> = core::cmp::PartialOrd::gt<'_0_0, '_0_1, Self, Rhs> + fn ge<'_0, '_1> = core::cmp::PartialOrd::ge<'_0_0, '_0_1, Self, Rhs> } trait core::cmp::Ord { parent_clause0 : [@TraitClause0]: core::cmp::Eq parent_clause1 : [@TraitClause1]: core::cmp::PartialOrd - fn cmp : core::cmp::Ord::cmp - fn max : core::cmp::Ord::max - fn min : core::cmp::Ord::min - fn clamp : core::cmp::Ord::clamp + fn cmp<'_0, '_1> = core::cmp::Ord::cmp<'_0_0, '_0_1, Self> + fn max<[@TraitClause0]: core::marker::Sized> = core::cmp::Ord::max[@TraitClause0_0] + fn min<[@TraitClause0]: core::marker::Sized> = core::cmp::Ord::min[@TraitClause0_0] + fn clamp<[@TraitClause0]: core::marker::Sized> = core::cmp::Ord::clamp[@TraitClause0_0] } opaque type core::iter::adapters::rev::Rev @@ -339,83 +339,83 @@ trait core::iter::traits::iterator::Iterator { parent_clause0 : [@TraitClause0]: core::marker::Sized type Item - fn next : core::iter::traits::iterator::Iterator::next - fn next_chunk : core::iter::traits::iterator::Iterator::next_chunk - fn size_hint : core::iter::traits::iterator::Iterator::size_hint - fn count : core::iter::traits::iterator::Iterator::count - fn last : core::iter::traits::iterator::Iterator::last - fn advance_by : core::iter::traits::iterator::Iterator::advance_by - fn nth : core::iter::traits::iterator::Iterator::nth - fn step_by : core::iter::traits::iterator::Iterator::step_by - fn chain : core::iter::traits::iterator::Iterator::chain - fn zip : core::iter::traits::iterator::Iterator::zip - fn intersperse : core::iter::traits::iterator::Iterator::intersperse - fn intersperse_with : core::iter::traits::iterator::Iterator::intersperse_with - fn map : core::iter::traits::iterator::Iterator::map - fn for_each : core::iter::traits::iterator::Iterator::for_each - fn filter : core::iter::traits::iterator::Iterator::filter - fn filter_map : core::iter::traits::iterator::Iterator::filter_map - fn enumerate : core::iter::traits::iterator::Iterator::enumerate - fn peekable : core::iter::traits::iterator::Iterator::peekable - fn skip_while : core::iter::traits::iterator::Iterator::skip_while - fn take_while : core::iter::traits::iterator::Iterator::take_while - fn map_while : core::iter::traits::iterator::Iterator::map_while - fn skip : core::iter::traits::iterator::Iterator::skip - fn take : core::iter::traits::iterator::Iterator::take - fn scan : core::iter::traits::iterator::Iterator::scan - fn flat_map : core::iter::traits::iterator::Iterator::flat_map - fn flatten : core::iter::traits::iterator::Iterator::flatten - fn map_windows : core::iter::traits::iterator::Iterator::map_windows - fn fuse : core::iter::traits::iterator::Iterator::fuse - fn inspect : core::iter::traits::iterator::Iterator::inspect - fn by_ref : core::iter::traits::iterator::Iterator::by_ref - fn collect : core::iter::traits::iterator::Iterator::collect - fn try_collect : core::iter::traits::iterator::Iterator::try_collect - fn collect_into : core::iter::traits::iterator::Iterator::collect_into - fn partition : core::iter::traits::iterator::Iterator::partition - fn partition_in_place : core::iter::traits::iterator::Iterator::partition_in_place - fn is_partitioned : core::iter::traits::iterator::Iterator::is_partitioned - fn try_fold : core::iter::traits::iterator::Iterator::try_fold - fn try_for_each : core::iter::traits::iterator::Iterator::try_for_each - fn fold : core::iter::traits::iterator::Iterator::fold - fn reduce : core::iter::traits::iterator::Iterator::reduce - fn try_reduce : core::iter::traits::iterator::Iterator::try_reduce - fn all : core::iter::traits::iterator::Iterator::all - fn any : core::iter::traits::iterator::Iterator::any - fn find : core::iter::traits::iterator::Iterator::find - fn find_map : core::iter::traits::iterator::Iterator::find_map - fn try_find : core::iter::traits::iterator::Iterator::try_find - fn position : core::iter::traits::iterator::Iterator::position - fn rposition : core::iter::traits::iterator::Iterator::rposition - fn max : core::iter::traits::iterator::Iterator::max - fn min : core::iter::traits::iterator::Iterator::min - fn max_by_key : core::iter::traits::iterator::Iterator::max_by_key - fn max_by : core::iter::traits::iterator::Iterator::max_by - fn min_by_key : core::iter::traits::iterator::Iterator::min_by_key - fn min_by : core::iter::traits::iterator::Iterator::min_by - fn rev : core::iter::traits::iterator::Iterator::rev - fn unzip : core::iter::traits::iterator::Iterator::unzip - fn copied : core::iter::traits::iterator::Iterator::copied - fn cloned : core::iter::traits::iterator::Iterator::cloned - fn cycle : core::iter::traits::iterator::Iterator::cycle - fn array_chunks : core::iter::traits::iterator::Iterator::array_chunks - fn sum : core::iter::traits::iterator::Iterator::sum - fn product : core::iter::traits::iterator::Iterator::product - fn cmp : core::iter::traits::iterator::Iterator::cmp - fn cmp_by : core::iter::traits::iterator::Iterator::cmp_by - fn partial_cmp : core::iter::traits::iterator::Iterator::partial_cmp - fn partial_cmp_by : core::iter::traits::iterator::Iterator::partial_cmp_by - fn eq : core::iter::traits::iterator::Iterator::eq - fn eq_by : core::iter::traits::iterator::Iterator::eq_by - fn ne : core::iter::traits::iterator::Iterator::ne - fn lt : core::iter::traits::iterator::Iterator::lt - fn le : core::iter::traits::iterator::Iterator::le - fn gt : core::iter::traits::iterator::Iterator::gt - fn ge : core::iter::traits::iterator::Iterator::ge - fn is_sorted : core::iter::traits::iterator::Iterator::is_sorted - fn is_sorted_by : core::iter::traits::iterator::Iterator::is_sorted_by - fn is_sorted_by_key : core::iter::traits::iterator::Iterator::is_sorted_by_key - fn __iterator_get_unchecked : core::iter::traits::iterator::Iterator::__iterator_get_unchecked + fn next<'_0> = core::iter::traits::iterator::Iterator::next<'_0_0, 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>[@TraitClause0_0] + fn size_hint<'_0> = core::iter::traits::iterator::Iterator::size_hint<'_0_0, Self> + fn count<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::count[@TraitClause0_0] + fn last<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::last[@TraitClause0_0] + fn advance_by<'_0> = core::iter::traits::iterator::Iterator::advance_by<'_0_0, Self> + fn nth<'_0> = core::iter::traits::iterator::Iterator::nth<'_0_0, Self> + fn step_by<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::step_by[@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[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn zip, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::iter::traits::collect::IntoIterator> = core::iter::traits::iterator::Iterator::zip[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn intersperse<[@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::clone::Clone> = core::iter::traits::iterator::Iterator::intersperse[@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[@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[@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[@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[@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[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn enumerate<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::enumerate[@TraitClause0_0] + fn peekable<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::peekable[@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[@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[@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[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn skip<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::skip[@TraitClause0_0] + fn take<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::take[@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[@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[@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[@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[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn fuse<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::fuse[@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[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn by_ref<'_0, [@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::by_ref<'_0_0, Self>[@TraitClause0_0] + fn collect, [@TraitClause1]: core::iter::traits::collect::FromIterator, [@TraitClause2]: core::marker::Sized> = core::iter::traits::iterator::Iterator::collect[@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>[@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>[@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[@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>[@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[@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>[@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>[@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[@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[@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>[@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>[@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>[@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>[@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>[@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>[@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>[@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>[@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[@TraitClause0_0, @TraitClause0_1] + fn min<[@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::cmp::Ord> = core::iter::traits::iterator::Iterator::min[@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[@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[@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[@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[@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[@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[@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>[@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>[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn cycle<[@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::clone::Clone> = core::iter::traits::iterator::Iterator::cycle[@TraitClause0_0, @TraitClause0_1] + fn array_chunks> = core::iter::traits::iterator::Iterator::array_chunks[@TraitClause0_0] + fn sum, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::iter::traits::accum::Sum> = core::iter::traits::iterator::Iterator::sum[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn product, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::iter::traits::accum::Product> = core::iter::traits::iterator::Iterator::product[@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[@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[@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[@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[@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[@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[@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[@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[@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[@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[@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[@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[@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[@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[@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>[@TraitClause0_0] } trait core::iter::traits::collect::IntoIterator @@ -427,7 +427,7 @@ where parent_clause2 : [@TraitClause2]: core::marker::Sized type Item type IntoIter - fn into_iter : core::iter::traits::collect::IntoIterator::into_iter + fn into_iter = core::iter::traits::collect::IntoIterator::into_iter } opaque type core::iter::adapters::intersperse::Intersperse @@ -470,34 +470,34 @@ trait core::iter::traits::collect::FromIterator { parent_clause0 : [@TraitClause0]: core::marker::Sized parent_clause1 : [@TraitClause1]: core::marker::Sized - fn from_iter : core::iter::traits::collect::FromIterator::from_iter + fn from_iter, [@TraitClause1]: core::iter::traits::collect::IntoIterator, @TraitClause1_1::Item = A> = core::iter::traits::collect::FromIterator::from_iter[@TraitClause0_0, @TraitClause0_1] } trait core::iter::traits::collect::Extend { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn extend : core::iter::traits::collect::Extend::extend - fn extend_one : core::iter::traits::collect::Extend::extend_one - fn extend_reserve : core::iter::traits::collect::Extend::extend_reserve - fn extend_one_unchecked : core::iter::traits::collect::Extend::extend_one_unchecked + 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>[@TraitClause0_0, @TraitClause0_1] + fn extend_one<'_0> = core::iter::traits::collect::Extend::extend_one<'_0_0, Self, A> + fn extend_reserve<'_0> = core::iter::traits::collect::Extend::extend_reserve<'_0_0, Self, A> + fn extend_one_unchecked<'_0, [@TraitClause0]: core::marker::Sized> = core::iter::traits::collect::Extend::extend_one_unchecked<'_0_0, Self, A>[@TraitClause0_0] } trait core::iter::traits::double_ended::DoubleEndedIterator { parent_clause0 : [@TraitClause0]: core::iter::traits::iterator::Iterator - fn next_back : core::iter::traits::double_ended::DoubleEndedIterator::next_back - fn advance_back_by : core::iter::traits::double_ended::DoubleEndedIterator::advance_back_by - fn nth_back : core::iter::traits::double_ended::DoubleEndedIterator::nth_back - fn try_rfold : core::iter::traits::double_ended::DoubleEndedIterator::try_rfold - fn rfold : core::iter::traits::double_ended::DoubleEndedIterator::rfold - fn rfind : core::iter::traits::double_ended::DoubleEndedIterator::rfind + fn next_back<'_0> = core::iter::traits::double_ended::DoubleEndedIterator::next_back<'_0_0, Self> + fn advance_back_by<'_0> = core::iter::traits::double_ended::DoubleEndedIterator::advance_back_by<'_0_0, Self> + fn nth_back<'_0> = core::iter::traits::double_ended::DoubleEndedIterator::nth_back<'_0_0, 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>[@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[@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>[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2] } trait core::iter::traits::exact_size::ExactSizeIterator { parent_clause0 : [@TraitClause0]: core::iter::traits::iterator::Iterator - fn len : core::iter::traits::exact_size::ExactSizeIterator::len - fn is_empty : core::iter::traits::exact_size::ExactSizeIterator::is_empty + fn len<'_0> = core::iter::traits::exact_size::ExactSizeIterator::len<'_0_0, Self> + fn is_empty<'_0> = core::iter::traits::exact_size::ExactSizeIterator::is_empty<'_0_0, Self> } opaque type core::iter::adapters::array_chunks::ArrayChunks @@ -509,21 +509,21 @@ trait core::iter::traits::accum::Sum { parent_clause0 : [@TraitClause0]: core::marker::Sized parent_clause1 : [@TraitClause1]: core::marker::Sized - fn sum : core::iter::traits::accum::Sum::sum + fn sum, [@TraitClause1]: core::iter::traits::iterator::Iterator, @TraitClause1_1::Item = A> = core::iter::traits::accum::Sum::sum[@TraitClause0_0, @TraitClause0_1] } trait core::iter::traits::accum::Product { parent_clause0 : [@TraitClause0]: core::marker::Sized parent_clause1 : [@TraitClause1]: core::marker::Sized - fn product : core::iter::traits::accum::Product::product + fn product, [@TraitClause1]: core::iter::traits::iterator::Iterator, @TraitClause1_1::Item = A> = core::iter::traits::accum::Product::product[@TraitClause0_0, @TraitClause0_1] } trait core::iter::adapters::zip::TrustedRandomAccessNoCoerce { parent_clause0 : [@TraitClause0]: core::marker::Sized const MAY_HAVE_SIDE_EFFECT : bool - fn size : core::iter::adapters::zip::TrustedRandomAccessNoCoerce::size + fn size<'_0, [@TraitClause0]: core::iter::traits::iterator::Iterator> = core::iter::adapters::zip::TrustedRandomAccessNoCoerce::size<'_0_0, Self>[@TraitClause0_0] } 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]) @@ -631,22 +631,22 @@ where { parent_clause0 = core::marker::Sized<&'_ (T)> type Item = &'a (T) - fn next = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::next - fn size_hint = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::size_hint - fn count = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::count - fn last = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::last - fn advance_by = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::advance_by - fn nth = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::nth - fn for_each = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::for_each - fn fold = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::fold - fn all = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::all - fn any = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::any - fn find = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::find - fn find_map = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::find_map - fn position = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::position - fn rposition = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::rposition - fn is_sorted_by = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::is_sorted_by - fn __iterator_get_unchecked = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::__iterator_get_unchecked + 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::iter::traits::iterator::Iterator::next_chunk<'_0, Self, const N : usize>(@1: &'_0 mut (Self)) -> core::result::Result, core::array::iter::IntoIter[Self::parent_clause0]>[core::marker::Sized>, core::marker::Sized[Self::parent_clause0]>] @@ -1174,23 +1174,71 @@ fn core::clone::Clone::clone<'_0, Self>(@1: &'_0 (Self)) -> Self fn core::clone::Clone::clone_from<'_0, '_1, Self>(@1: &'_0 mut (Self), @2: &'_1 (Self)) -fn core::iter::traits::collect::IntoIterator::into_iter(@1: Self) -> Self::IntoIter +fn core::cmp::PartialEq::eq<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool + +fn core::cmp::PartialEq::ne<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool + +fn core::cmp::Ord::cmp<'_0, '_1, Self>(@1: &'_0 (Self), @2: &'_1 (Self)) -> core::cmp::Ordering + +fn core::cmp::Ord::max(@1: Self, @2: Self) -> Self +where + [@TraitClause0]: core::marker::Sized, + +fn core::cmp::Ord::min(@1: Self, @2: Self) -> Self +where + [@TraitClause0]: core::marker::Sized, + +fn core::cmp::Ord::clamp(@1: Self, @2: Self, @3: Self) -> Self +where + [@TraitClause0]: core::marker::Sized, + +fn core::cmp::Eq::assert_receiver_is_total_eq<'_0, Self>(@1: &'_0 (Self)) + +fn core::cmp::PartialOrd::partial_cmp<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> core::option::Option[core::marker::Sized] + +fn core::cmp::PartialOrd::lt<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool + +fn core::cmp::PartialOrd::le<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool + +fn core::cmp::PartialOrd::gt<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool + +fn core::cmp::PartialOrd::ge<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool + +fn core::default::Default::default() -> Self fn core::ops::function::FnMut::call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> Self::parent_clause0::Output fn core::ops::function::FnOnce::call_once(@1: Self, @2: Args) -> Self::Output +fn core::ops::try_trait::Try::from_output(@1: Self::Output) -> Self + +fn core::ops::try_trait::Try::branch(@1: Self) -> core::ops::control_flow::ControlFlow[Self::parent_clause0::parent_clause0, Self::parent_clause1] + +fn core::ops::try_trait::FromResidual::from_residual(@1: R) -> Self + +fn core::iter::adapters::zip::TrustedRandomAccessNoCoerce::size<'_0, Self>(@1: &'_0 (Self)) -> usize +where + [@TraitClause0]: core::iter::traits::iterator::Iterator, + +fn core::iter::traits::accum::Sum::sum(@1: I) -> Self +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::iter::traits::iterator::Iterator, + @TraitClause1::Item = A, + +fn core::iter::traits::accum::Product::product(@1: I) -> Self +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::iter::traits::iterator::Iterator, + @TraitClause1::Item = A, + fn core::iter::traits::collect::FromIterator::from_iter(@1: T) -> Self where [@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::iter::traits::collect::IntoIterator, @TraitClause1::Item = A, -fn core::ops::try_trait::Try::from_output(@1: Self::Output) -> Self - -fn core::ops::try_trait::Try::branch(@1: Self) -> core::ops::control_flow::ControlFlow[Self::parent_clause0::parent_clause0, Self::parent_clause1] - -fn core::ops::try_trait::FromResidual::from_residual(@1: R) -> Self +fn core::iter::traits::collect::IntoIterator::into_iter(@1: Self) -> Self::IntoIter fn core::iter::traits::collect::Extend::extend<'_0, Self, A, T>(@1: &'_0 mut (Self), @2: T) where @@ -1206,8 +1254,6 @@ unsafe fn core::iter::traits::collect::Extend::extend_one_unchecked<'_0, Self, A where [@TraitClause0]: core::marker::Sized, -fn core::default::Default::default() -> Self - fn core::iter::traits::double_ended::DoubleEndedIterator::next_back<'_0, Self>(@1: &'_0 mut (Self)) -> core::option::Option[Self::parent_clause0::parent_clause0] 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]>] @@ -1244,51 +1290,5 @@ fn core::iter::traits::exact_size::ExactSizeIterator::len<'_0, Self>(@1: &'_0 (S fn core::iter::traits::exact_size::ExactSizeIterator::is_empty<'_0, Self>(@1: &'_0 (Self)) -> bool -fn core::cmp::Ord::cmp<'_0, '_1, Self>(@1: &'_0 (Self), @2: &'_1 (Self)) -> core::cmp::Ordering - -fn core::cmp::Ord::max(@1: Self, @2: Self) -> Self -where - [@TraitClause0]: core::marker::Sized, - -fn core::cmp::Ord::min(@1: Self, @2: Self) -> Self -where - [@TraitClause0]: core::marker::Sized, - -fn core::cmp::Ord::clamp(@1: Self, @2: Self, @3: Self) -> Self -where - [@TraitClause0]: core::marker::Sized, - -fn core::cmp::Eq::assert_receiver_is_total_eq<'_0, Self>(@1: &'_0 (Self)) - -fn core::cmp::PartialEq::eq<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool - -fn core::cmp::PartialEq::ne<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool - -fn core::cmp::PartialOrd::partial_cmp<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> core::option::Option[core::marker::Sized] - -fn core::cmp::PartialOrd::lt<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool - -fn core::cmp::PartialOrd::le<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool - -fn core::cmp::PartialOrd::gt<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool - -fn core::cmp::PartialOrd::ge<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool - -fn core::iter::traits::accum::Sum::sum(@1: I) -> Self -where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::iter::traits::iterator::Iterator, - @TraitClause1::Item = A, - -fn core::iter::traits::accum::Product::product(@1: I) -> Self -where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::iter::traits::iterator::Iterator, - @TraitClause1::Item = A, - -fn core::iter::adapters::zip::TrustedRandomAccessNoCoerce::size<'_0, Self>(@1: &'_0 (Self)) -> usize -where - [@TraitClause0]: core::iter::traits::iterator::Iterator, -

, [@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>[@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[@TraitClause0_0, @TraitClause0_1] + fn min<[@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::cmp::Ord> = core::iter::traits::iterator::Iterator::min[@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[@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[@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[@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[@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[@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[@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>[@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>[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn cycle<[@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::clone::Clone> = core::iter::traits::iterator::Iterator::cycle[@TraitClause0_0, @TraitClause0_1] + fn array_chunks> = core::iter::traits::iterator::Iterator::array_chunks[@TraitClause0_0] + fn sum, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::iter::traits::accum::Sum> = core::iter::traits::iterator::Iterator::sum[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn product, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::iter::traits::accum::Product> = core::iter::traits::iterator::Iterator::product[@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[@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[@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[@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[@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[@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[@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[@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[@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[@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[@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[@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[@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[@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[@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>[@TraitClause0_0] } trait core::iter::traits::collect::IntoIterator @@ -389,7 +389,7 @@ where parent_clause2 : [@TraitClause2]: core::marker::Sized type Item type IntoIter - fn into_iter : core::iter::traits::collect::IntoIterator::into_iter + fn into_iter = core::iter::traits::collect::IntoIterator::into_iter } opaque type core::iter::adapters::intersperse::Intersperse @@ -432,34 +432,34 @@ trait core::iter::traits::collect::FromIterator { parent_clause0 : [@TraitClause0]: core::marker::Sized parent_clause1 : [@TraitClause1]: core::marker::Sized - fn from_iter : core::iter::traits::collect::FromIterator::from_iter + fn from_iter, [@TraitClause1]: core::iter::traits::collect::IntoIterator, @TraitClause1_1::Item = A> = core::iter::traits::collect::FromIterator::from_iter[@TraitClause0_0, @TraitClause0_1] } trait core::iter::traits::collect::Extend { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn extend : core::iter::traits::collect::Extend::extend - fn extend_one : core::iter::traits::collect::Extend::extend_one - fn extend_reserve : core::iter::traits::collect::Extend::extend_reserve - fn extend_one_unchecked : core::iter::traits::collect::Extend::extend_one_unchecked + 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>[@TraitClause0_0, @TraitClause0_1] + fn extend_one<'_0> = core::iter::traits::collect::Extend::extend_one<'_0_0, Self, A> + fn extend_reserve<'_0> = core::iter::traits::collect::Extend::extend_reserve<'_0_0, Self, A> + fn extend_one_unchecked<'_0, [@TraitClause0]: core::marker::Sized> = core::iter::traits::collect::Extend::extend_one_unchecked<'_0_0, Self, A>[@TraitClause0_0] } trait core::iter::traits::double_ended::DoubleEndedIterator { parent_clause0 : [@TraitClause0]: core::iter::traits::iterator::Iterator - fn next_back : core::iter::traits::double_ended::DoubleEndedIterator::next_back - fn advance_back_by : core::iter::traits::double_ended::DoubleEndedIterator::advance_back_by - fn nth_back : core::iter::traits::double_ended::DoubleEndedIterator::nth_back - fn try_rfold : core::iter::traits::double_ended::DoubleEndedIterator::try_rfold - fn rfold : core::iter::traits::double_ended::DoubleEndedIterator::rfold - fn rfind : core::iter::traits::double_ended::DoubleEndedIterator::rfind + fn next_back<'_0> = core::iter::traits::double_ended::DoubleEndedIterator::next_back<'_0_0, Self> + fn advance_back_by<'_0> = core::iter::traits::double_ended::DoubleEndedIterator::advance_back_by<'_0_0, Self> + fn nth_back<'_0> = core::iter::traits::double_ended::DoubleEndedIterator::nth_back<'_0_0, 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>[@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[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn rfind<'_0, P, [@TraitClause0]: core::marker::Sized