[][src]Module rustc_typeck::collect

"Collection" is the process of determining the type and other external details of each item in Rust. Collection is specifically concerned with inter-procedural things -- for example, for a function definition, collection will figure out the type and signature of the function, but it will not visit the body of the function in any way, nor examine type annotations on local variables (that's the job of type checking).

Collecting is ultimately defined by a bundle of queries that inquire after various facts about the items in the crate (e.g., type_of, generics_of, predicates_of, etc). See the provide function for the full set.

At present, however, we do run collection across all items in the crate as a kind of pass. This should eventually be factored away.

Modules

type_of

Structs

AnonConstInParamListDetector
CollectItemTypesVisitor
ItemCtxt

Context specific to some particular item. This is what implements AstConv. It has information about the predicates that are defined on the trait. Unfortunately, this predicate information is available in various different forms at various points in the process. So we can't just store a pointer to e.g., the AST or the parsed ty form, we have to be more flexible. To this end, the ItemCtxt is parameterized by a DefId that it uses to satisfy get_type_parameter_bounds requests, drawing the information from the AST (hir::Generics), recursively.

OnlySelfBounds
PlaceholderHirTyCollector

Functions

adt_def
are_suggestable_generic_args
associated_item_bounds
bad_placeholder_type
check_link_name_xor_ordinal
check_link_ordinal
check_target_feature_safe_fn

Checks the function annotated with #[target_feature] is unsafe, reporting an error if it isn't.

check_target_feature_trait_unsafe

Checks the function annotated with #[target_feature] is not a safe trait method implementation, reporting an error if it is.

codegen_fn_attrs
collect_mod_item_types
compute_sig_of_foreign_fn_decl
convert_enum_variant_types
convert_impl_item
convert_item
convert_trait_item
convert_variant
convert_variant_ctor
early_bound_lifetimes_from_generics

Returns the early-bound lifetimes declared in this generics listing. For anything other than fns/methods, this is just all the lifetimes that are declared. For fns or methods, we have to screen out those that do not appear in any where-clauses etc using resolve_lifetime::early_bound_lifetimes.

explicit_predicates_of

Returns a list of user-specified type predicates for the definition with ID def_id. N.B., this does not include any implied/inferred constraints.

fn_sig
from_target_feature
generator_kind
generics_of
get_infer_ret_ty
get_new_lifetime_name

Synthesize a new lifetime name that doesn't clash with any of the lifetimes already present.

has_late_bound_regions
impl_polarity
impl_trait_ref
is_foreign_item
is_param

Tests whether this is the AST for a reference to the type parameter with ID param_id. We use this so as to avoid running ast_ty_to_ty, because we want to avoid triggering an all-out conversion of the type to avoid inducing unnecessary cycles.

is_suggestable_infer_ty

Whether ty is a type with _ placeholders that can be inferred. Used in diagnostics only to use inference to provide suggestions for the appropriate type if possible.

linkage_by_name
placeholder_type_error

If there are any placeholder types (_), emit an error explaining that this is not allowed and suggest adding type parameters in the appropriate place, taking into consideration any and all already existing generic type parameters to avoid suggesting a name that is already in use.

predicates_defined_on

Returns a list of type predicates for the definition with ID def_id, including inferred lifetime constraints. This includes all predicates returned by explicit_predicates_of, plus inferred constraints concerning which regions outlive other regions.

predicates_from_bound

Converts a specific GenericBound from the AST into a set of predicates that apply to the self type. A vector is returned because this can be anywhere from zero predicates (T: ?Sized adds no predicates) to one (T: Foo) to many (T: Bar<X = i32> adds T: Bar and <T as Bar>::X == i32).

predicates_of

Returns a list of all type predicates (explicit and implicit) for the definition with ID def_id. This includes all predicates returned by predicates_defined_on, plus Self: Trait predicates for traits.

provide
reject_placeholder_type_signatures_in_item
should_inherit_track_caller

Checks if the provided DefId is a method in a trait impl for a trait which has track_caller applied to the method prototype.

static_mutability
super_predicates_of

Ensures that the super-predicates of the trait with a DefId of trait_def_id are converted and stored. This also ensures that the transitive super-predicates are converted.

trait_associated_item_predicates
trait_def
type_param_predicates

Returns the predicates defined on item_def_id of the form X: Foo where X is the type parameter def_id.