From: achernyak Date: Sat, 29 Apr 2017 14:56:01 +0000 (-0500) Subject: added dep nodes and comment X-Git-Url: https://git.lizzy.rs/?a=commitdiff_plain;h=ad1959e8e426279f68c1dd73a67356638c9ee295;p=rust.git added dep nodes and comment --- diff --git a/src/librustc/dep_graph/dep_node.rs b/src/librustc/dep_graph/dep_node.rs index 31e6a3106a4..acf9baf9677 100644 --- a/src/librustc/dep_graph/dep_node.rs +++ b/src/librustc/dep_graph/dep_node.rs @@ -148,6 +148,10 @@ pub enum DepNode { // For proj. cache, we just keep a list of all def-ids, since it is // not a hotspot. ProjectionCache { def_ids: Vec }, + + // Depnodes for MetaData + DescribeDef(D), + DefSpan(D), } impl DepNode { @@ -253,6 +257,8 @@ pub fn map_def(&self, mut op: OP) -> Option> let def_ids: Option> = def_ids.iter().map(op).collect(); def_ids.map(|d| ProjectionCache { def_ids: d }) } + DescribeDef(ref d) => op(d).map(MetaData), + DefSpan(ref d) => op(d).map(MetaData), } } } diff --git a/src/librustc/ty/maps.rs b/src/librustc/ty/maps.rs index 13c167de0fd..233066f266a 100644 --- a/src/librustc/ty/maps.rs +++ b/src/librustc/ty/maps.rs @@ -365,6 +365,8 @@ fn try_get_with(tcx: TyCtxt<'a, $tcx, 'lcx>, } // FIXME(eddyb) Get more valid Span's on queries. + // def_span guard is necesary to prevent a recursive loop, + // default_span calls def_span query internally. if span == DUMMY_SP && stringify!($name) != "def_span" { span = key.default_span(tcx) } @@ -574,9 +576,8 @@ fn default() -> Self { [] def_symbol_name: SymbolName(DefId) -> ty::SymbolName, [] symbol_name: symbol_name_dep_node(ty::Instance<'tcx>) -> ty::SymbolName, - - [] describe_def: MetaData(DefId) -> Option, - [] def_span: MetaData(DefId) -> Span + [] describe_def: describe_def(DefId) -> Option, + [] def_span: def_span(DefId) -> Span } fn coherent_trait_dep_node((_, def_id): (CrateNum, DefId)) -> DepNode { @@ -608,3 +609,11 @@ fn typeck_item_bodies_dep_node(_: CrateNum) -> DepNode { fn const_eval_dep_node((def_id, _): (DefId, &Substs)) -> DepNode { DepNode::ConstEval(def_id) } + +fn describe_def(def_id: DefId) -> DepNode { + DepNode::DescribeDef(def_id) +} + +fn def_span(def_id: DefId) -> DepNode { + DepNode::DefSpan(def_id) +}