mirror of
https://github.com/rust-lang/rust.git
synced 2025-05-14 02:49:40 +00:00
Move definition of callbacks to parent module.
This commit is contained in:
parent
a4b1158f78
commit
6e4af4a2d1
@ -86,6 +86,93 @@ pub use self::on_disk_cache::OnDiskCache;
|
|||||||
mod profiling_support;
|
mod profiling_support;
|
||||||
pub use self::profiling_support::alloc_self_profile_query_strings;
|
pub use self::profiling_support::alloc_self_profile_query_strings;
|
||||||
|
|
||||||
|
#[derive(Copy, Clone)]
|
||||||
|
pub struct TyCtxtAt<'tcx> {
|
||||||
|
pub tcx: TyCtxt<'tcx>,
|
||||||
|
pub span: Span,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Deref for TyCtxtAt<'tcx> {
|
||||||
|
type Target = TyCtxt<'tcx>;
|
||||||
|
#[inline(always)]
|
||||||
|
fn deref(&self) -> &Self::Target {
|
||||||
|
&self.tcx
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Copy, Clone)]
|
||||||
|
pub struct TyCtxtEnsure<'tcx> {
|
||||||
|
pub tcx: TyCtxt<'tcx>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl TyCtxt<'tcx> {
|
||||||
|
/// Returns a transparent wrapper for `TyCtxt`, which ensures queries
|
||||||
|
/// are executed instead of just returning their results.
|
||||||
|
#[inline(always)]
|
||||||
|
pub fn ensure(self) -> TyCtxtEnsure<'tcx> {
|
||||||
|
TyCtxtEnsure { tcx: self }
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Returns a transparent wrapper for `TyCtxt` which uses
|
||||||
|
/// `span` as the location of queries performed through it.
|
||||||
|
#[inline(always)]
|
||||||
|
pub fn at(self, span: Span) -> TyCtxtAt<'tcx> {
|
||||||
|
TyCtxtAt { tcx: self, span }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
macro_rules! define_callbacks {
|
||||||
|
(<$tcx:tt>
|
||||||
|
$($(#[$attr:meta])*
|
||||||
|
[$($modifiers:tt)*] fn $name:ident($($K:tt)*) -> $V:ty,)*) => {
|
||||||
|
|
||||||
|
impl TyCtxtEnsure<$tcx> {
|
||||||
|
$($(#[$attr])*
|
||||||
|
#[inline(always)]
|
||||||
|
pub fn $name(self, key: query_helper_param_ty!($($K)*)) {
|
||||||
|
let key = key.into_query_param();
|
||||||
|
let cached = try_get_cached(self.tcx, &self.tcx.query_caches.$name, &key, |_| {});
|
||||||
|
|
||||||
|
let lookup = match cached {
|
||||||
|
Ok(()) => return,
|
||||||
|
Err(lookup) => lookup,
|
||||||
|
};
|
||||||
|
|
||||||
|
self.tcx.queries.$name(self.tcx, DUMMY_SP, key, lookup, QueryMode::Ensure);
|
||||||
|
})*
|
||||||
|
}
|
||||||
|
|
||||||
|
impl TyCtxt<$tcx> {
|
||||||
|
$($(#[$attr])*
|
||||||
|
#[inline(always)]
|
||||||
|
#[must_use]
|
||||||
|
pub fn $name(self, key: query_helper_param_ty!($($K)*)) -> query_stored::$name<$tcx>
|
||||||
|
{
|
||||||
|
self.at(DUMMY_SP).$name(key)
|
||||||
|
})*
|
||||||
|
}
|
||||||
|
|
||||||
|
impl TyCtxtAt<$tcx> {
|
||||||
|
$($(#[$attr])*
|
||||||
|
#[inline(always)]
|
||||||
|
pub fn $name(self, key: query_helper_param_ty!($($K)*)) -> query_stored::$name<$tcx>
|
||||||
|
{
|
||||||
|
let key = key.into_query_param();
|
||||||
|
let cached = try_get_cached(self.tcx, &self.tcx.query_caches.$name, &key, |value| {
|
||||||
|
value.clone()
|
||||||
|
});
|
||||||
|
|
||||||
|
let lookup = match cached {
|
||||||
|
Ok(value) => return value,
|
||||||
|
Err(lookup) => lookup,
|
||||||
|
};
|
||||||
|
|
||||||
|
self.tcx.queries.$name(self.tcx, self.span, key, lookup, QueryMode::Get).unwrap()
|
||||||
|
})*
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Each of these queries corresponds to a function pointer field in the
|
// Each of these queries corresponds to a function pointer field in the
|
||||||
// `Providers` struct for requesting a value of that type, and a method
|
// `Providers` struct for requesting a value of that type, and a method
|
||||||
// on `tcx: TyCtxt` (and `tcx.at(span)`) for doing that request in a way
|
// on `tcx: TyCtxt` (and `tcx.at(span)`) for doing that request in a way
|
||||||
@ -99,6 +186,7 @@ pub use self::profiling_support::alloc_self_profile_query_strings;
|
|||||||
// as they will raise an fatal error on query cycles instead.
|
// as they will raise an fatal error on query cycles instead.
|
||||||
|
|
||||||
rustc_query_append! { [define_queries!][<'tcx>] }
|
rustc_query_append! { [define_queries!][<'tcx>] }
|
||||||
|
rustc_query_append! { [define_callbacks!][<'tcx>] }
|
||||||
|
|
||||||
mod sealed {
|
mod sealed {
|
||||||
use super::{DefId, LocalDefId};
|
use super::{DefId, LocalDefId};
|
||||||
|
@ -456,89 +456,6 @@ macro_rules! define_queries {
|
|||||||
}
|
}
|
||||||
})*
|
})*
|
||||||
|
|
||||||
#[derive(Copy, Clone)]
|
|
||||||
pub struct TyCtxtEnsure<'tcx> {
|
|
||||||
pub tcx: TyCtxt<'tcx>,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl TyCtxtEnsure<$tcx> {
|
|
||||||
$($(#[$attr])*
|
|
||||||
#[inline(always)]
|
|
||||||
pub fn $name(self, key: query_helper_param_ty!($($K)*)) {
|
|
||||||
let key = key.into_query_param();
|
|
||||||
let cached = try_get_cached(self.tcx, &self.tcx.query_caches.$name, &key, |_| {});
|
|
||||||
|
|
||||||
let lookup = match cached {
|
|
||||||
Ok(()) => return,
|
|
||||||
Err(lookup) => lookup,
|
|
||||||
};
|
|
||||||
|
|
||||||
self.tcx.queries.$name(self.tcx, DUMMY_SP, key, lookup, QueryMode::Ensure);
|
|
||||||
})*
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Copy, Clone)]
|
|
||||||
pub struct TyCtxtAt<'tcx> {
|
|
||||||
pub tcx: TyCtxt<'tcx>,
|
|
||||||
pub span: Span,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Deref for TyCtxtAt<'tcx> {
|
|
||||||
type Target = TyCtxt<'tcx>;
|
|
||||||
#[inline(always)]
|
|
||||||
fn deref(&self) -> &Self::Target {
|
|
||||||
&self.tcx
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl TyCtxt<$tcx> {
|
|
||||||
/// Returns a transparent wrapper for `TyCtxt`, which ensures queries
|
|
||||||
/// are executed instead of just returning their results.
|
|
||||||
#[inline(always)]
|
|
||||||
pub fn ensure(self) -> TyCtxtEnsure<$tcx> {
|
|
||||||
TyCtxtEnsure {
|
|
||||||
tcx: self,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Returns a transparent wrapper for `TyCtxt` which uses
|
|
||||||
/// `span` as the location of queries performed through it.
|
|
||||||
#[inline(always)]
|
|
||||||
pub fn at(self, span: Span) -> TyCtxtAt<$tcx> {
|
|
||||||
TyCtxtAt {
|
|
||||||
tcx: self,
|
|
||||||
span
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$($(#[$attr])*
|
|
||||||
#[inline(always)]
|
|
||||||
#[must_use]
|
|
||||||
pub fn $name(self, key: query_helper_param_ty!($($K)*)) -> query_stored::$name<$tcx>
|
|
||||||
{
|
|
||||||
self.at(DUMMY_SP).$name(key)
|
|
||||||
})*
|
|
||||||
}
|
|
||||||
|
|
||||||
impl TyCtxtAt<$tcx> {
|
|
||||||
$($(#[$attr])*
|
|
||||||
#[inline(always)]
|
|
||||||
pub fn $name(self, key: query_helper_param_ty!($($K)*)) -> query_stored::$name<$tcx>
|
|
||||||
{
|
|
||||||
let key = key.into_query_param();
|
|
||||||
let cached = try_get_cached(self.tcx, &self.tcx.query_caches.$name, &key, |value| {
|
|
||||||
value.clone()
|
|
||||||
});
|
|
||||||
|
|
||||||
let lookup = match cached {
|
|
||||||
Ok(value) => return value,
|
|
||||||
Err(lookup) => lookup,
|
|
||||||
};
|
|
||||||
|
|
||||||
self.tcx.queries.$name(self.tcx, self.span, key, lookup, QueryMode::Get).unwrap()
|
|
||||||
})*
|
|
||||||
}
|
|
||||||
|
|
||||||
define_provider_struct! {
|
define_provider_struct! {
|
||||||
tcx: $tcx,
|
tcx: $tcx,
|
||||||
input: ($(([$($modifiers)*] [$name] [$($K)*] [$V]))*)
|
input: ($(([$($modifiers)*] [$name] [$($K)*] [$V]))*)
|
||||||
|
Loading…
Reference in New Issue
Block a user