Struct rustc::ty::_match::Match
[−]
[src]
pub struct Match<'a, 'gcx: 'a + 'tcx, 'tcx: 'a> { /* fields omitted */ }
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
A type "A" matches "B" if the fresh types in B could be substituted with values so as to make it equal to A. Matching is intended to be used only on freshened types, and it basically indicates if the non-freshened versions of A and B could have been unified.
It is only an approximation. If it yields false, unification would definitely fail, but a true result doesn't mean unification would succeed. This is because we don't track the "side-constraints" on type variables, nor do we track if the same freshened type appears more than once. To some extent these approximations could be fixed, given effort.
Like subtyping, matching is really a binary relation, so the only important thing about the result is Ok/Err. Also, matching never affects any type variables or unification state.
Methods
impl<'a, 'gcx, 'tcx> Match<'a, 'gcx, 'tcx>
[src]
impl<'a, 'gcx, 'tcx> Match<'a, 'gcx, 'tcx>
pub fn new(tcx: TyCtxt<'a, 'gcx, 'tcx>) -> Match<'a, 'gcx, 'tcx>
[src]
pub fn new(tcx: TyCtxt<'a, 'gcx, 'tcx>) -> Match<'a, 'gcx, 'tcx>
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
Trait Implementations
impl<'a, 'gcx, 'tcx> TypeRelation<'a, 'gcx, 'tcx> for Match<'a, 'gcx, 'tcx>
[src]
impl<'a, 'gcx, 'tcx> TypeRelation<'a, 'gcx, 'tcx> for Match<'a, 'gcx, 'tcx>
fn tag(&self) -> &'static str
[src]
fn tag(&self) -> &'static str
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
Returns a static string we can use for printouts.
fn tcx(&self) -> TyCtxt<'a, 'gcx, 'tcx>
[src]
fn tcx(&self) -> TyCtxt<'a, 'gcx, 'tcx>
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
fn a_is_expected(&self) -> bool
[src]
fn a_is_expected(&self) -> bool
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
Returns true if the value a
is the "expected" type in the relation. Just affects error messages. Read more
fn relate_with_variance<T: Relate<'tcx>>(
&mut self,
_: Variance,
a: &T,
b: &T
) -> RelateResult<'tcx, T>
[src]
fn relate_with_variance<T: Relate<'tcx>>(
&mut self,
_: Variance,
a: &T,
b: &T
) -> RelateResult<'tcx, T>
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
Switch variance for the purpose of relating a
and b
.
fn regions(
&mut self,
a: Region<'tcx>,
b: Region<'tcx>
) -> RelateResult<'tcx, Region<'tcx>>
[src]
fn regions(
&mut self,
a: Region<'tcx>,
b: Region<'tcx>
) -> RelateResult<'tcx, Region<'tcx>>
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
fn tys(&mut self, a: Ty<'tcx>, b: Ty<'tcx>) -> RelateResult<'tcx, Ty<'tcx>>
[src]
fn tys(&mut self, a: Ty<'tcx>, b: Ty<'tcx>) -> RelateResult<'tcx, Ty<'tcx>>
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
fn binders<T>(
&mut self,
a: &Binder<T>,
b: &Binder<T>
) -> RelateResult<'tcx, Binder<T>> where
T: Relate<'tcx>,
[src]
fn binders<T>(
&mut self,
a: &Binder<T>,
b: &Binder<T>
) -> RelateResult<'tcx, Binder<T>> where
T: Relate<'tcx>,
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
fn with_cause<F, R>(&mut self, _cause: Cause, f: F) -> R where
F: FnOnce(&mut Self) -> R,
[src]
fn with_cause<F, R>(&mut self, _cause: Cause, f: F) -> R where
F: FnOnce(&mut Self) -> R,
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
fn relate<T: Relate<'tcx>>(&mut self, a: &T, b: &T) -> RelateResult<'tcx, T>
[src]
fn relate<T: Relate<'tcx>>(&mut self, a: &T, b: &T) -> RelateResult<'tcx, T>
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
Generic relation routine suitable for most anything.
fn relate_item_substs(
&mut self,
item_def_id: DefId,
a_subst: &'tcx Substs<'tcx>,
b_subst: &'tcx Substs<'tcx>
) -> RelateResult<'tcx, &'tcx Substs<'tcx>>
[src]
fn relate_item_substs(
&mut self,
item_def_id: DefId,
a_subst: &'tcx Substs<'tcx>,
b_subst: &'tcx Substs<'tcx>
) -> RelateResult<'tcx, &'tcx Substs<'tcx>>
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
Relate the two substitutions for the given item. The default is to look up the variance for the item and proceed accordingly. Read more