14
14
15
15
use common:: CrateInfo ;
16
16
use cstore:: { self , CStore , CrateSource , MetadataBlob } ;
17
- use decoder;
18
17
use loader:: { self , CratePaths } ;
19
18
20
19
use rustc:: hir:: def_id:: { CrateNum , DefIndex } ;
@@ -28,6 +27,7 @@ use rustc::util::nodemap::{FnvHashMap, FnvHashSet};
28
27
use rustc:: hir:: map as hir_map;
29
28
30
29
use std:: cell:: { RefCell , Cell } ;
30
+ use std:: ops:: Deref ;
31
31
use std:: path:: PathBuf ;
32
32
use std:: rc:: Rc ;
33
33
use std:: fs;
@@ -143,11 +143,13 @@ enum PMDSource {
143
143
Owned ( loader:: Library ) ,
144
144
}
145
145
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 {
148
150
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
151
153
}
152
154
}
153
155
}
@@ -295,7 +297,7 @@ impl<'a> CrateReader<'a> {
295
297
-> ( CrateNum , Rc < cstore:: CrateMetadata > ,
296
298
cstore:: CrateSource ) {
297
299
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 ( ) ;
299
301
self . verify_no_symbol_conflicts ( span, & crate_info) ;
300
302
301
303
// Claim this crate number and cache it
@@ -317,7 +319,7 @@ impl<'a> CrateReader<'a> {
317
319
318
320
let loader:: Library { dylib, rlib, metadata } = lib;
319
321
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) ;
321
323
322
324
if crate_info. macro_derive_registrar . is_some ( ) {
323
325
self . sess . span_err ( span, "crates of the `rustc-macro` crate type \
@@ -328,8 +330,8 @@ impl<'a> CrateReader<'a> {
328
330
name : name. to_string ( ) ,
329
331
extern_crate : Cell :: new ( None ) ,
330
332
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 ( ) ,
333
335
data : metadata,
334
336
cnum_map : RefCell :: new ( cnum_map) ,
335
337
cnum : cnum,
@@ -414,7 +416,7 @@ impl<'a> CrateReader<'a> {
414
416
// Note that we only do this for target triple crates, though, as we
415
417
// don't want to match a host crate against an equivalent target one
416
418
// already loaded.
417
- let crate_info = decoder :: get_crate_info ( library. metadata . as_slice ( ) ) ;
419
+ let crate_info = library. metadata . get_crate_info ( ) ;
418
420
if loader. triple == self . sess . opts . target_triple {
419
421
let mut result = LoadResult :: Loaded ( library) ;
420
422
self . cstore . iter_crate_data ( |cnum, data| {
@@ -465,14 +467,14 @@ impl<'a> CrateReader<'a> {
465
467
// Go through the crate metadata and load any crates that it references
466
468
fn resolve_crate_deps ( & mut self ,
467
469
root : & Option < CratePaths > ,
468
- cdata : & [ u8 ] ,
470
+ metadata : & MetadataBlob ,
469
471
krate : CrateNum ,
470
472
span : Span )
471
473
-> cstore:: CrateNumMap {
472
474
debug ! ( "resolving deps of external crate" ) ;
473
475
// The map from crate numbers in the crate we're resolving to local crate
474
476
// numbers
475
- let map: FnvHashMap < _ , _ > = decoder :: get_crate_deps ( cdata ) . iter ( ) . map ( |dep| {
477
+ let map: FnvHashMap < _ , _ > = metadata . get_crate_deps ( ) . iter ( ) . map ( |dep| {
476
478
debug ! ( "resolving dep crate {} hash: `{}`" , dep. name, dep. hash) ;
477
479
let ( local_cnum, ..) = self . resolve_crate ( root,
478
480
& dep. name ,
@@ -566,16 +568,15 @@ impl<'a> CrateReader<'a> {
566
568
let ci = self . extract_crate_info ( item) . unwrap ( ) ;
567
569
let ekrate = self . read_extension_crate ( item. span , & ci) ;
568
570
569
- let crate_info = decoder :: get_crate_info ( ekrate. metadata . as_slice ( ) ) ;
571
+ let crate_info = ekrate. metadata . get_crate_info ( ) ;
570
572
let source_name = format ! ( "<{} macros>" , item. ident) ;
571
573
let mut ret = Macros {
572
574
macro_rules : Vec :: new ( ) ,
573
575
custom_derive_registrar : None ,
574
576
svh : crate_info. hash ,
575
577
dylib : None ,
576
578
} ;
577
- decoder:: each_exported_macro ( ekrate. metadata . as_slice ( ) ,
578
- |name, attrs, span, body| {
579
+ ekrate. metadata . each_exported_macro ( |name, attrs, span, body| {
579
580
// NB: Don't use parse::parse_tts_from_source_str because it parses with
580
581
// quote_depth > 0.
581
582
let mut p = parse:: new_parser_from_source_str ( & self . sess . parse_sess ,
@@ -670,7 +671,7 @@ impl<'a> CrateReader<'a> {
670
671
span_fatal ! ( self . sess, span, E0456 , "{}" , & message[ ..] ) ;
671
672
}
672
673
673
- let crate_info = decoder :: get_crate_info ( ekrate. metadata . as_slice ( ) ) ;
674
+ let crate_info = ekrate. metadata . get_crate_info ( ) ;
674
675
match ( ekrate. dylib . as_ref ( ) , crate_info. plugin_registrar_fn ) {
675
676
( Some ( dylib) , Some ( reg) ) => {
676
677
Some ( ( dylib. to_path_buf ( ) , crate_info. hash , reg) )
@@ -1111,7 +1112,7 @@ pub fn read_local_crates(sess: & Session,
1111
1112
pub fn import_codemap ( local_codemap : & codemap:: CodeMap ,
1112
1113
metadata : & MetadataBlob )
1113
1114
-> Vec < cstore:: ImportedFileMap > {
1114
- let external_codemap = decoder :: get_imported_filemaps ( metadata. as_slice ( ) ) ;
1115
+ let external_codemap = metadata. get_imported_filemaps ( ) ;
1115
1116
1116
1117
let imported_filemaps = external_codemap. into_iter ( ) . map ( |filemap_to_import| {
1117
1118
// Try to find an existing FileMap that can be reused for the filemap to
0 commit comments