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,7 @@ 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
+ out_line ! ( tcx. crate_name( dylib_deps. 0 ) , "{:?}" , dylib_deps. 1 ) ;
169
168
}
170
169
}
171
170
@@ -176,23 +175,23 @@ fn print_macros(tcx: TyCtxt, crate_data: &CrateMetadata, _matches: &ArgMatches)
176
175
}
177
176
178
177
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) => {
178
+ for_each_export ( tcx, & crate_data, tcx. sess , & |def_id | {
179
+ use rustc_span :: MacroKind ;
180
+ match tcx . def_kind ( def_id ) {
181
+ DefKind :: Macro ( macro_kind) => {
183
182
Some ( match macro_kind {
184
183
MacroKind :: Bang => "macro!" ,
185
184
MacroKind :: Attr => "#[macro]" ,
186
185
MacroKind :: Derive => "#[derive(Macro)]" ,
187
- MacroKind :: ProcMacroStub => "<proc-macro-stub>" ,
186
+ // MacroKind::ProcMacroStub => "<proc-macro-stub>",
188
187
} )
189
188
}
190
189
_ => None
191
190
}
192
191
} ) ;
193
192
}
194
193
195
- fn print_symbols < ' a , ' tcx : ' a > ( tcx : TyCtxt < ' a , ' tcx , ' tcx > , crate_data : & CrateMetadata , _matches : & ArgMatches ) {
194
+ fn print_symbols < ' tcx > ( tcx : TyCtxt < ' tcx > , crate_data : & CrateMetadata , _matches : & ArgMatches ) {
196
195
header ! ( "Exported symbols:" ) ;
197
196
if crate_data. proc_macros . is_none ( ) {
198
197
for ( exported_symbol, export_level) in crate_data. exported_symbols ( tcx) . into_iter ( ) . take ( 50 ) {
@@ -215,34 +214,34 @@ fn print_symbols<'a, 'tcx: 'a>(tcx: TyCtxt<'a, 'tcx, 'tcx>, crate_data: &CrateMe
215
214
}
216
215
217
216
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" ) ,
217
+ for_each_export ( tcx, & crate_data, tcx. sess , & |def_id | {
218
+ match tcx . def_kind ( def_id ) {
219
+ DefKind :: Struct |
220
+ DefKind :: Union |
221
+ DefKind :: Enum |
222
+ DefKind :: Trait |
223
+ DefKind :: ForeignTy => Some ( tcx . def_kind ( def_id ) . descr ( def_id ) ) ,
224
+ DefKind :: TyAlias => Some ( "type" ) ,
226
225
_ => None
227
226
}
228
227
} ) ;
229
228
230
229
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 ( ) ) ,
230
+ for_each_export ( tcx, & crate_data, tcx. sess , & |def_id | {
231
+ match tcx . def_kind ( def_id ) {
232
+ DefKind :: Fn |
233
+ DefKind :: Struct |
234
+ DefKind :: Union |
235
+ DefKind :: Enum |
236
+ DefKind :: Trait |
237
+ DefKind :: TyAlias |
238
+ DefKind :: ForeignTy |
239
+ DefKind :: Macro ( _) => None , // Already handled
240
+ DefKind :: Ctor ( ..) |
241
+ DefKind :: Variant => None , // Not very useful
242
+ DefKind :: Const => Some ( "const" ) ,
243
+ DefKind :: Static ( _) => Some ( "static" ) ,
244
+ other => Some ( other . descr ( def_id ) ) ,
246
245
}
247
246
} ) ;
248
247
}
@@ -252,29 +251,28 @@ fn print_mir(tcx: TyCtxt, _crate_data: &CrateMetadata, matches: &ArgMatches) {
252
251
let def_id = parse_defid_from_str ( def_id) ;
253
252
println ! ( "mir for {}:\n " , tcx. def_path_str( def_id) ) ;
254
253
let mut mir = :: std:: io:: Cursor :: new ( Vec :: new ( ) ) ;
255
- :: rustc_mir :: util :: write_mir_pretty ( tcx, Some ( def_id) , & mut mir) . unwrap ( ) ;
254
+ :: rustc :: mir :: write_mir_pretty ( tcx, Some ( def_id) , & mut mir) . unwrap ( ) ;
256
255
let mir = String :: from_utf8 ( mir. into_inner ( ) ) . unwrap ( ) ;
257
256
println ! ( "{}" , mir) ;
258
257
}
259
258
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) => {
259
+ fn for_each_export < F : Fn ( DefId ) -> Option < & ' static str > > ( tcx : TyCtxt , crate_data : & CrateMetadata , sess : & Session , callback : & F ) {
260
+ fn each_export_inner < F : Fn ( DefId ) -> Option < & ' static str > > ( tcx : TyCtxt , crate_data : & CrateMetadata , id : DefIndex , callback : & F , sess : & Session ) {
261
+ crate_data. each_child_of_item ( id, |def_id| {
262
+ match tcx. def_kind ( def_id) {
263
+ DefKind :: Mod => {
266
264
//println!("mod {}", tcx.def_path_str(def_id));
267
265
each_export_inner ( tcx, crate_data, def_id. index , callback, sess) ;
268
266
} ,
269
267
_ => {
270
- if let Some ( name) = callback ( e ) {
271
- println ! ( " {}{:<10}{} {}" , Fg ( Cyan ) , name, Fg ( Reset ) , tcx. def_path_str( e . def . def_id( ) ) ) ;
268
+ if let Some ( name) = callback ( def_id ) {
269
+ println ! ( " {}{:<10}{} {}" , Fg ( Cyan ) , name, Fg ( Reset ) , tcx. def_path_str( def_id) ) ;
272
270
}
273
271
} ,
274
272
}
275
273
} , sess) ;
276
274
}
277
- each_export_inner ( tcx, crate_data, :: rustc :: hir :: def_id :: CRATE_DEF_INDEX , callback, sess) ;
275
+ each_export_inner ( tcx, crate_data, CRATE_DEF_INDEX , callback, sess) ;
278
276
}
279
277
280
278
/*fn for_each_export<F: Fn(Export) -> Option<&'static str>>(tcx: TyCtxt, crate_data: &CrateMetadata, sess: &Session, callback: &F) {
0 commit comments