Skip to content

Commit adddfcc

Browse files
committed
rustc_metadata: move all encoding/decoding helpers to methods.
1 parent 6890354 commit adddfcc

File tree

10 files changed

+1002
-1130
lines changed

10 files changed

+1002
-1130
lines changed

src/librustc/middle/cstore.rs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,6 @@ pub trait CrateStore<'tcx> {
188188
fn is_compiler_builtins(&self, cnum: CrateNum) -> bool;
189189
fn panic_strategy(&self, cnum: CrateNum) -> PanicStrategy;
190190
fn extern_crate(&self, cnum: CrateNum) -> Option<ExternCrate>;
191-
fn crate_attrs(&self, cnum: CrateNum) -> Vec<ast::Attribute>;
192191
/// The name of the crate as it is referred to in source code of the current
193192
/// crate.
194193
fn crate_name(&self, cnum: CrateNum) -> InternedString;
@@ -365,8 +364,6 @@ impl<'tcx> CrateStore<'tcx> for DummyCrateStore {
365364
bug!("panic_strategy")
366365
}
367366
fn extern_crate(&self, cnum: CrateNum) -> Option<ExternCrate> { bug!("extern_crate") }
368-
fn crate_attrs(&self, cnum: CrateNum) -> Vec<ast::Attribute>
369-
{ bug!("crate_attrs") }
370367
fn crate_name(&self, cnum: CrateNum) -> InternedString { bug!("crate_name") }
371368
fn original_crate_name(&self, cnum: CrateNum) -> InternedString {
372369
bug!("original_crate_name")

src/librustc_metadata/astencode.rs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@
88
// option. This file may not be copied, modified, or distributed
99
// except according to those terms.
1010

11-
#![allow(non_camel_case_types)]
12-
1311
use rustc::hir::map as ast_map;
1412

1513
use rustc::hir::intravisit::{Visitor, IdRangeComputingVisitor, IdRange};
@@ -64,9 +62,7 @@ pub fn decode_inlined_item<'a, 'tcx>(cdata: &CrateMetadata,
6462
orig_did: DefId)
6563
-> &'tcx InlinedItem {
6664
debug!("> Decoding inlined fn: {:?}", tcx.item_path_str(orig_did));
67-
let dcx = &mut ast_doc.decoder();
68-
dcx.tcx = Some(tcx);
69-
dcx.cdata = Some(cdata);
65+
let dcx = &mut DecodeContext::new(ast_doc, Some(cdata)).typed(tcx);
7066
dcx.from_id_range = IdRange::decode(dcx).unwrap();
7167
let cnt = dcx.from_id_range.max.as_usize() - dcx.from_id_range.min.as_usize();
7268
dcx.to_id_range.min = tcx.sess.reserve_node_ids(cnt);

src/librustc_metadata/creader.rs

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
1515
use common::CrateInfo;
1616
use cstore::{self, CStore, CrateSource, MetadataBlob};
17-
use decoder;
1817
use loader::{self, CratePaths};
1918

2019
use rustc::hir::def_id::{CrateNum, DefIndex};
@@ -28,6 +27,7 @@ use rustc::util::nodemap::{FnvHashMap, FnvHashSet};
2827
use rustc::hir::map as hir_map;
2928

3029
use std::cell::{RefCell, Cell};
30+
use std::ops::Deref;
3131
use std::path::PathBuf;
3232
use std::rc::Rc;
3333
use std::fs;
@@ -143,11 +143,13 @@ enum PMDSource {
143143
Owned(loader::Library),
144144
}
145145

146-
impl PMDSource {
147-
pub fn as_slice<'a>(&'a self) -> &'a [u8] {
146+
impl Deref for PMDSource {
147+
type Target = MetadataBlob;
148+
149+
fn deref(&self) -> &MetadataBlob {
148150
match *self {
149-
PMDSource::Registered(ref cmd) => cmd.data(),
150-
PMDSource::Owned(ref lib) => lib.metadata.as_slice(),
151+
PMDSource::Registered(ref cmd) => &cmd.data,
152+
PMDSource::Owned(ref lib) => &lib.metadata
151153
}
152154
}
153155
}
@@ -295,7 +297,7 @@ impl<'a> CrateReader<'a> {
295297
-> (CrateNum, Rc<cstore::CrateMetadata>,
296298
cstore::CrateSource) {
297299
info!("register crate `extern crate {} as {}`", name, ident);
298-
let crate_info = decoder::get_crate_info(lib.metadata.as_slice());
300+
let crate_info = lib.metadata.get_crate_info();
299301
self.verify_no_symbol_conflicts(span, &crate_info);
300302

301303
// Claim this crate number and cache it
@@ -317,7 +319,7 @@ impl<'a> CrateReader<'a> {
317319

318320
let loader::Library { dylib, rlib, metadata } = lib;
319321

320-
let cnum_map = self.resolve_crate_deps(root, metadata.as_slice(), cnum, span);
322+
let cnum_map = self.resolve_crate_deps(root, &metadata, cnum, span);
321323

322324
if crate_info.macro_derive_registrar.is_some() {
323325
self.sess.span_err(span, "crates of the `rustc-macro` crate type \
@@ -328,8 +330,8 @@ impl<'a> CrateReader<'a> {
328330
name: name.to_string(),
329331
extern_crate: Cell::new(None),
330332
info: crate_info,
331-
index: decoder::load_index(metadata.as_slice()),
332-
key_map: decoder::load_key_map(metadata.as_slice()),
333+
index: metadata.load_index(),
334+
key_map: metadata.load_key_map(),
333335
data: metadata,
334336
cnum_map: RefCell::new(cnum_map),
335337
cnum: cnum,
@@ -414,7 +416,7 @@ impl<'a> CrateReader<'a> {
414416
// Note that we only do this for target triple crates, though, as we
415417
// don't want to match a host crate against an equivalent target one
416418
// already loaded.
417-
let crate_info = decoder::get_crate_info(library.metadata.as_slice());
419+
let crate_info = library.metadata.get_crate_info();
418420
if loader.triple == self.sess.opts.target_triple {
419421
let mut result = LoadResult::Loaded(library);
420422
self.cstore.iter_crate_data(|cnum, data| {
@@ -465,14 +467,14 @@ impl<'a> CrateReader<'a> {
465467
// Go through the crate metadata and load any crates that it references
466468
fn resolve_crate_deps(&mut self,
467469
root: &Option<CratePaths>,
468-
cdata: &[u8],
470+
metadata: &MetadataBlob,
469471
krate: CrateNum,
470472
span: Span)
471473
-> cstore::CrateNumMap {
472474
debug!("resolving deps of external crate");
473475
// The map from crate numbers in the crate we're resolving to local crate
474476
// numbers
475-
let map: FnvHashMap<_, _> = decoder::get_crate_deps(cdata).iter().map(|dep| {
477+
let map: FnvHashMap<_, _> = metadata.get_crate_deps().iter().map(|dep| {
476478
debug!("resolving dep crate {} hash: `{}`", dep.name, dep.hash);
477479
let (local_cnum, ..) = self.resolve_crate(root,
478480
&dep.name,
@@ -566,16 +568,15 @@ impl<'a> CrateReader<'a> {
566568
let ci = self.extract_crate_info(item).unwrap();
567569
let ekrate = self.read_extension_crate(item.span, &ci);
568570

569-
let crate_info = decoder::get_crate_info(ekrate.metadata.as_slice());
571+
let crate_info = ekrate.metadata.get_crate_info();
570572
let source_name = format!("<{} macros>", item.ident);
571573
let mut ret = Macros {
572574
macro_rules: Vec::new(),
573575
custom_derive_registrar: None,
574576
svh: crate_info.hash,
575577
dylib: None,
576578
};
577-
decoder::each_exported_macro(ekrate.metadata.as_slice(),
578-
|name, attrs, span, body| {
579+
ekrate.metadata.each_exported_macro(|name, attrs, span, body| {
579580
// NB: Don't use parse::parse_tts_from_source_str because it parses with
580581
// quote_depth > 0.
581582
let mut p = parse::new_parser_from_source_str(&self.sess.parse_sess,
@@ -670,7 +671,7 @@ impl<'a> CrateReader<'a> {
670671
span_fatal!(self.sess, span, E0456, "{}", &message[..]);
671672
}
672673

673-
let crate_info = decoder::get_crate_info(ekrate.metadata.as_slice());
674+
let crate_info = ekrate.metadata.get_crate_info();
674675
match (ekrate.dylib.as_ref(), crate_info.plugin_registrar_fn) {
675676
(Some(dylib), Some(reg)) => {
676677
Some((dylib.to_path_buf(), crate_info.hash, reg))
@@ -1111,7 +1112,7 @@ pub fn read_local_crates(sess: & Session,
11111112
pub fn import_codemap(local_codemap: &codemap::CodeMap,
11121113
metadata: &MetadataBlob)
11131114
-> Vec<cstore::ImportedFileMap> {
1114-
let external_codemap = decoder::get_imported_filemaps(metadata.as_slice());
1115+
let external_codemap = metadata.get_imported_filemaps();
11151116

11161117
let imported_filemaps = external_codemap.into_iter().map(|filemap_to_import| {
11171118
// Try to find an existing FileMap that can be reused for the filemap to

0 commit comments

Comments
 (0)