Skip to content

Commit

Permalink
Treat NodeIs as pure values for incremental compilation
Browse files Browse the repository at this point in the history
  • Loading branch information
Zoxc committed Feb 15, 2020
1 parent dbef353 commit a7db505
Show file tree
Hide file tree
Showing 3 changed files with 6 additions and 43 deletions.
22 changes: 3 additions & 19 deletions src/librustc/ich/hcx.rs
Expand Up @@ -219,28 +219,12 @@ impl<'a> ToStableHashKey<StableHashingContext<'a>> for hir::HirId {
}
}

impl<'a> HashStable<StableHashingContext<'a>> for ast::NodeId {
fn hash_stable(&self, hcx: &mut StableHashingContext<'a>, hasher: &mut StableHasher) {
match hcx.node_id_hashing_mode {
NodeIdHashingMode::Ignore => {
// Don't do anything.
}
NodeIdHashingMode::HashDefPath => {
hcx.definitions.node_to_hir_id(*self).hash_stable(hcx, hasher);
}
}
}
}

impl<'a> ToStableHashKey<StableHashingContext<'a>> for ast::NodeId {
type KeyType = (DefPathHash, hir::ItemLocalId);
type KeyType = Self;

#[inline]
fn to_stable_hash_key(
&self,
hcx: &StableHashingContext<'a>,
) -> (DefPathHash, hir::ItemLocalId) {
hcx.definitions.node_to_hir_id(*self).to_stable_hash_key(hcx)
fn to_stable_hash_key(&self, _: &StableHashingContext<'a>) -> Self {
*self
}
}

Expand Down
25 changes: 1 addition & 24 deletions src/librustc/ty/query/on_disk_cache.rs
Expand Up @@ -22,7 +22,7 @@ use rustc_span::hygiene::{ExpnId, SyntaxContext};
use rustc_span::source_map::{SourceMap, StableSourceFileId};
use rustc_span::{BytePos, SourceFile, Span, DUMMY_SP};
use std::mem;
use syntax::ast::{Ident, NodeId};
use syntax::ast::Ident;

const TAG_FILE_FOOTER: u128 = 0xC0FFEE_C0FFEE_C0FFEE_C0FFEE_C0FFEE;

Expand Down Expand Up @@ -680,16 +680,6 @@ impl<'a, 'tcx> SpecializedDecoder<hir::HirId> for CacheDecoder<'a, 'tcx> {
}
}

// `NodeId`s are not stable across compilation sessions, so we store them in their
// `HirId` representation. This allows use to map them to the current `NodeId`.
impl<'a, 'tcx> SpecializedDecoder<NodeId> for CacheDecoder<'a, 'tcx> {
#[inline]
fn specialized_decode(&mut self) -> Result<NodeId, Self::Error> {
let hir_id = hir::HirId::decode(self)?;
Ok(self.tcx().hir().hir_to_node_id(hir_id))
}
}

impl<'a, 'tcx> SpecializedDecoder<Fingerprint> for CacheDecoder<'a, 'tcx> {
fn specialized_decode(&mut self) -> Result<Fingerprint, Self::Error> {
Fingerprint::decode_opaque(&mut self.opaque)
Expand Down Expand Up @@ -928,19 +918,6 @@ where
}
}

// `NodeId`s are not stable across compilation sessions, so we store them in their
// `HirId` representation. This allows use to map them to the current `NodeId`.
impl<'a, 'tcx, E> SpecializedEncoder<NodeId> for CacheEncoder<'a, 'tcx, E>
where
E: 'a + TyEncoder,
{
#[inline]
fn specialized_encode(&mut self, node_id: &NodeId) -> Result<(), Self::Error> {
let hir_id = self.tcx.hir().node_to_hir_id(*node_id);
hir_id.encode(self)
}
}

impl<'a, 'tcx> SpecializedEncoder<Fingerprint> for CacheEncoder<'a, 'tcx, opaque::Encoder> {
fn specialized_encode(&mut self, f: &Fingerprint) -> Result<(), Self::Error> {
f.encode_opaque(&mut self.encoder)
Expand Down
2 changes: 2 additions & 0 deletions src/libsyntax/node_id.rs
@@ -1,8 +1,10 @@
use rustc_macros::HashStable_Generic;
use rustc_serialize::{Decoder, Encoder};
use rustc_span::ExpnId;
use std::fmt;

rustc_index::newtype_index! {
#[derive(HashStable_Generic)]
pub struct NodeId {
ENCODABLE = custom
DEBUG_FORMAT = "NodeId({})"
Expand Down

0 comments on commit a7db505

Please sign in to comment.