1
1
use std:: fmt;
2
2
3
3
use rustc:: ty:: TyCtxt ;
4
- use rustc :: session :: Session ;
5
- use rustc :: middle :: lang_items:: LangItem ;
4
+ use rustc_session :: Session ;
5
+ use rustc_hir :: lang_items:: LangItem ;
6
6
use rustc:: middle:: exported_symbols:: ExportedSymbol ;
7
- use rustc:: hir:: def:: { Export , Def } ;
8
- use rustc:: hir:: def_id:: { DefId , CrateNum , DefIndex , DefIndexAddressSpace } ;
9
- use rustc_metadata:: cstore:: { CrateMetadata , NativeLibraryKind } ;
7
+ use rustc_hir:: def:: DefKind ;
8
+ use rustc_hir:: def_id:: { DefId , CrateNum , DefIndex , DefIndexAddressSpace } ;
9
+ use rustc_metadata:: rmeta:: decoder:: CrateMetadata ;
10
+ use rustc_span:: def_id:: CRATE_DEF_INDEX ;
10
11
11
12
use termion:: color:: * ;
12
13
use clap:: { App , SubCommand , Arg , ArgMatches } ;
@@ -48,7 +49,7 @@ macro_rules! commands {
48
49
]
49
50
}
50
51
51
- pub fn print_for_matches<' a , ' tcx: ' a >( matches: & ArgMatches , tcx: TyCtxt <' a , ' tcx , ' tcx>, crate_data: & CrateMetadata ) {
52
+ pub fn print_for_matches<' tcx>( matches: & ArgMatches , tcx: TyCtxt <' tcx>, crate_data: & CrateMetadata ) {
52
53
let cmd = matches. subcommand_name( ) ;
53
54
match cmd. unwrap( ) {
54
55
$(
@@ -149,7 +150,7 @@ fn print_deps(tcx: TyCtxt, crate_data: &CrateMetadata, _matches: &ArgMatches) {
149
150
}
150
151
151
152
header ! ( "Native libraries:" ) ;
152
- for native_lib in crate_data . get_native_libraries ( tcx . sess ) {
153
+ for native_lib in tcx . native_libraries ( crate_data . cnum ) {
153
154
/*out_line!(native_lib.name,
154
155
"{}",
155
156
match native_lib.kind {
@@ -163,9 +164,9 @@ fn print_deps(tcx: TyCtxt, crate_data: &CrateMetadata, _matches: &ArgMatches) {
163
164
164
165
header ! ( "Dylib dependency formats:" ) ;
165
166
for dylib_deps in crate_data. get_dylib_dependency_formats ( ) {
166
- let ext_crate_data = tcx. crate_data_as_rc_any ( dylib_deps. 0 ) ;
167
- let ext_crate_data = ext_crate_data. downcast_ref :: < CrateMetadata > ( ) . unwrap ( ) ;
168
- out_line ! ( ext_crate_data . name , "{:?}" , dylib_deps. 1 ) ;
167
+ // let ext_crate_data = tcx.cstore_untracked().get_crate_data (dylib_deps.0);
168
+ // let ext_crate_data = ext_crate_data.downcast_ref::<CrateMetadata>().unwrap();
169
+ out_line ! ( tcx . crate_name ( dylib_deps . 0 ) , "{:?}" , dylib_deps. 1 ) ;
169
170
}
170
171
}
171
172
@@ -176,23 +177,23 @@ fn print_macros(tcx: TyCtxt, crate_data: &CrateMetadata, _matches: &ArgMatches)
176
177
}
177
178
178
179
header ! ( "Macros:" ) ;
179
- for_each_export ( tcx, & crate_data, tcx. sess , & |export | {
180
- use syntax :: ext :: base :: MacroKind ;
181
- match export . def {
182
- Def :: Macro ( _def_id , macro_kind) => {
180
+ for_each_export ( tcx, & crate_data, tcx. sess , & |def_id | {
181
+ use rustc_span :: MacroKind ;
182
+ match tcx . def_kind ( def_id ) {
183
+ DefKind :: Macro ( macro_kind) => {
183
184
Some ( match macro_kind {
184
185
MacroKind :: Bang => "macro!" ,
185
186
MacroKind :: Attr => "#[macro]" ,
186
187
MacroKind :: Derive => "#[derive(Macro)]" ,
187
- MacroKind :: ProcMacroStub => "<proc-macro-stub>" ,
188
+ // MacroKind::ProcMacroStub => "<proc-macro-stub>",
188
189
} )
189
190
}
190
191
_ => None
191
192
}
192
193
} ) ;
193
194
}
194
195
195
- fn print_symbols < ' a , ' tcx : ' a > ( tcx : TyCtxt < ' a , ' tcx , ' tcx > , crate_data : & CrateMetadata , _matches : & ArgMatches ) {
196
+ fn print_symbols < ' tcx > ( tcx : TyCtxt < ' tcx > , crate_data : & CrateMetadata , _matches : & ArgMatches ) {
196
197
header ! ( "Exported symbols:" ) ;
197
198
if crate_data. proc_macros . is_none ( ) {
198
199
for ( exported_symbol, export_level) in crate_data. exported_symbols ( tcx) . into_iter ( ) . take ( 50 ) {
@@ -215,34 +216,34 @@ fn print_symbols<'a, 'tcx: 'a>(tcx: TyCtxt<'a, 'tcx, 'tcx>, crate_data: &CrateMe
215
216
}
216
217
217
218
header ! ( "Types:" ) ;
218
- for_each_export ( tcx, & crate_data, tcx. sess , & |export | {
219
- match export . def {
220
- Def :: Struct ( _ ) |
221
- Def :: Union ( _ ) |
222
- Def :: Enum ( _ ) |
223
- Def :: Trait ( _ ) |
224
- Def :: ForeignTy ( _ ) => Some ( export . def . kind_name ( ) ) ,
225
- Def :: TyAlias ( _ ) => Some ( "type" ) ,
219
+ for_each_export ( tcx, & crate_data, tcx. sess , & |def_id | {
220
+ match tcx . def_kind ( def_id ) {
221
+ DefKind :: Struct |
222
+ DefKind :: Union |
223
+ DefKind :: Enum |
224
+ DefKind :: Trait |
225
+ DefKind :: ForeignTy => Some ( tcx . def_kind ( def_id ) . descr ( def_id ) ) ,
226
+ DefKind :: TyAlias => Some ( "type" ) ,
226
227
_ => None
227
228
}
228
229
} ) ;
229
230
230
231
header ! ( "Items:" ) ;
231
- for_each_export ( tcx, & crate_data, tcx. sess , & |export | {
232
- match export . def {
233
- Def :: Fn ( _ ) |
234
- Def :: Struct ( _ ) |
235
- Def :: Union ( _ ) |
236
- Def :: Enum ( _ ) |
237
- Def :: Trait ( _ ) |
238
- Def :: TyAlias ( _ ) |
239
- Def :: ForeignTy ( _ ) |
240
- Def :: Macro ( _ , _) => None , // Already handled
241
- Def :: Ctor ( ..) |
242
- Def :: Variant ( _ ) => None , // Not very useful
243
- Def :: Const ( _ ) => Some ( "const" ) ,
244
- Def :: Static ( _ , _) => Some ( "static" ) ,
245
- _ => Some ( export . def . kind_name ( ) ) ,
232
+ for_each_export ( tcx, & crate_data, tcx. sess , & |def_id | {
233
+ match tcx . def_kind ( def_id ) {
234
+ DefKind :: Fn |
235
+ DefKind :: Struct |
236
+ DefKind :: Union |
237
+ DefKind :: Enum |
238
+ DefKind :: Trait |
239
+ DefKind :: TyAlias |
240
+ DefKind :: ForeignTy |
241
+ DefKind :: Macro ( _) => None , // Already handled
242
+ DefKind :: Ctor ( ..) |
243
+ DefKind :: Variant => None , // Not very useful
244
+ DefKind :: Const => Some ( "const" ) ,
245
+ DefKind :: Static ( _) => Some ( "static" ) ,
246
+ other => Some ( other . descr ( def_id ) ) ,
246
247
}
247
248
} ) ;
248
249
}
@@ -252,29 +253,28 @@ fn print_mir(tcx: TyCtxt, _crate_data: &CrateMetadata, matches: &ArgMatches) {
252
253
let def_id = parse_defid_from_str ( def_id) ;
253
254
println ! ( "mir for {}:\n " , tcx. def_path_str( def_id) ) ;
254
255
let mut mir = :: std:: io:: Cursor :: new ( Vec :: new ( ) ) ;
255
- :: rustc_mir :: util :: write_mir_pretty ( tcx, Some ( def_id) , & mut mir) . unwrap ( ) ;
256
+ :: rustc :: mir :: write_mir_pretty ( tcx, Some ( def_id) , & mut mir) . unwrap ( ) ;
256
257
let mir = String :: from_utf8 ( mir. into_inner ( ) ) . unwrap ( ) ;
257
258
println ! ( "{}" , mir) ;
258
259
}
259
260
260
- fn for_each_export < F : Fn ( Export ) -> Option < & ' static str > > ( tcx : TyCtxt , crate_data : & CrateMetadata , sess : & Session , callback : & F ) {
261
- use rustc:: hir:: def_id:: DefIndex ;
262
- fn each_export_inner < F : Fn ( Export ) -> Option < & ' static str > > ( tcx : TyCtxt , crate_data : & CrateMetadata , id : DefIndex , callback : & F , sess : & Session ) {
263
- crate_data. each_child_of_item ( id, |e| {
264
- match e. def {
265
- Def :: Mod ( def_id) => {
261
+ fn for_each_export < F : Fn ( DefId ) -> Option < & ' static str > > ( tcx : TyCtxt , crate_data : & CrateMetadata , sess : & Session , callback : & F ) {
262
+ fn each_export_inner < F : Fn ( DefId ) -> Option < & ' static str > > ( tcx : TyCtxt , crate_data : & CrateMetadata , id : DefIndex , callback : & F , sess : & Session ) {
263
+ crate_data. each_child_of_item ( id, |def_id| {
264
+ match tcx. def_kind ( def_id) {
265
+ DefKind :: Mod => {
266
266
//println!("mod {}", tcx.def_path_str(def_id));
267
267
each_export_inner ( tcx, crate_data, def_id. index , callback, sess) ;
268
268
} ,
269
269
_ => {
270
- if let Some ( name) = callback ( e ) {
271
- println ! ( " {}{:<10}{} {}" , Fg ( Cyan ) , name, Fg ( Reset ) , tcx. def_path_str( e . def . def_id( ) ) ) ;
270
+ if let Some ( name) = callback ( def_id ) {
271
+ println ! ( " {}{:<10}{} {}" , Fg ( Cyan ) , name, Fg ( Reset ) , tcx. def_path_str( def_id) ) ;
272
272
}
273
273
} ,
274
274
}
275
275
} , sess) ;
276
276
}
277
- each_export_inner ( tcx, crate_data, :: rustc :: hir :: def_id :: CRATE_DEF_INDEX , callback, sess) ;
277
+ each_export_inner ( tcx, crate_data, CRATE_DEF_INDEX , callback, sess) ;
278
278
}
279
279
280
280
/*fn for_each_export<F: Fn(Export) -> Option<&'static str>>(tcx: TyCtxt, crate_data: &CrateMetadata, sess: &Session, callback: &F) {
0 commit comments