@@ -272,7 +272,6 @@ pub type McResult<T> = Result<T, ()>;
272272/// can be sure that only `Ok` results will occur.
273273pub trait Typer < ' tcx > : ty:: UnboxedClosureTyper < ' tcx > {
274274 fn tcx < ' a > ( & ' a self ) -> & ' a ty:: ctxt < ' tcx > ;
275- fn param_env < ' a > ( & ' a self ) -> & ' a ty:: ParameterEnvironment < ' a , ' tcx > ;
276275 fn node_ty ( & self , id : ast:: NodeId ) -> McResult < Ty < ' tcx > > ;
277276 fn expr_ty_adjusted ( & self , expr : & ast:: Expr ) -> McResult < Ty < ' tcx > > ;
278277 fn type_moves_by_default ( & self , span : Span , ty : Ty < ' tcx > ) -> bool ;
@@ -1292,77 +1291,8 @@ impl<'t,'tcx,TYPER:Typer<'tcx>> MemCategorizationContext<'t,TYPER> {
12921291 self . tcx ( ) . sess . span_bug ( pat. span , "unexpanded macro" ) ;
12931292 }
12941293 }
1295- }
12961294
1297- pub fn cmt_to_string ( & self , cmt : & cmt_ < ' tcx > ) -> String {
1298- fn upvar_to_string ( upvar : & Upvar , is_copy : bool ) -> String {
1299- if upvar. is_unboxed {
1300- let kind = match upvar. kind {
1301- ty:: FnUnboxedClosureKind => "Fn" ,
1302- ty:: FnMutUnboxedClosureKind => "FnMut" ,
1303- ty:: FnOnceUnboxedClosureKind => "FnOnce"
1304- } ;
1305- format ! ( "captured outer variable in an `{}` closure" , kind)
1306- } else {
1307- ( match ( upvar. kind , is_copy) {
1308- ( ty:: FnOnceUnboxedClosureKind , true ) => "captured outer variable in a proc" ,
1309- _ => "captured outer variable"
1310- } ) . to_string ( )
1311- }
1312- }
1313-
1314- match cmt. cat {
1315- cat_static_item => {
1316- "static item" . to_string ( )
1317- }
1318- cat_rvalue( ..) => {
1319- "non-lvalue" . to_string ( )
1320- }
1321- cat_local( vid) => {
1322- match self . tcx ( ) . map . find ( vid) {
1323- Some ( ast_map:: NodeArg ( _) ) => {
1324- "argument" . to_string ( )
1325- }
1326- _ => "local variable" . to_string ( )
1327- }
1328- }
1329- cat_deref( _, _, pk) => {
1330- let upvar = cmt. upvar ( ) ;
1331- match upvar. as_ref ( ) . map ( |i| & i. cat ) {
1332- Some ( & cat_upvar( ref var) ) => {
1333- upvar_to_string ( var, false )
1334- }
1335- Some ( _) => unreachable ! ( ) ,
1336- None => {
1337- match pk {
1338- Implicit ( ..) => {
1339- "dereference (dereference is implicit, due to indexing)" . to_string ( )
1340- }
1341- Unique => format ! ( "dereference of `{}`" , ptr_sigil( pk) ) ,
1342- _ => format ! ( "dereference of `{}`-pointer" , ptr_sigil( pk) )
1343- }
1344- }
1345- }
1346- }
1347- cat_interior( _, InteriorField ( NamedField ( _) ) ) => {
1348- "field" . to_string ( )
1349- }
1350- cat_interior( _, InteriorField ( PositionalField ( _) ) ) => {
1351- "anonymous field" . to_string ( )
1352- }
1353- cat_interior( _, InteriorElement ( VecElement ) ) => {
1354- "vec content" . to_string ( )
1355- }
1356- cat_interior( _, InteriorElement ( OtherElement ) ) => {
1357- "indexed content" . to_string ( )
1358- }
1359- cat_upvar( ref var) => {
1360- upvar_to_string ( var, true )
1361- }
1362- cat_downcast( ref cmt, _) => {
1363- self . cmt_to_string ( & * * cmt)
1364- }
1365- }
1295+ Ok ( ( ) )
13661296 }
13671297}
13681298
@@ -1474,6 +1404,78 @@ impl<'tcx> cmt_<'tcx> {
14741404 NoteNone => None
14751405 }
14761406 }
1407+
1408+
1409+ pub fn descriptive_string ( & self , tcx : & ty:: ctxt ) -> String {
1410+ fn upvar_to_string ( upvar : & Upvar , is_copy : bool ) -> String {
1411+ if upvar. is_unboxed {
1412+ let kind = match upvar. kind {
1413+ ty:: FnUnboxedClosureKind => "Fn" ,
1414+ ty:: FnMutUnboxedClosureKind => "FnMut" ,
1415+ ty:: FnOnceUnboxedClosureKind => "FnOnce"
1416+ } ;
1417+ format ! ( "captured outer variable in an `{}` closure" , kind)
1418+ } else {
1419+ ( match ( upvar. kind , is_copy) {
1420+ ( ty:: FnOnceUnboxedClosureKind , true ) => "captured outer variable in a proc" ,
1421+ _ => "captured outer variable"
1422+ } ) . to_string ( )
1423+ }
1424+ }
1425+
1426+ match self . cat {
1427+ cat_static_item => {
1428+ "static item" . to_string ( )
1429+ }
1430+ cat_rvalue( ..) => {
1431+ "non-lvalue" . to_string ( )
1432+ }
1433+ cat_local( vid) => {
1434+ match tcx. map . find ( vid) {
1435+ Some ( ast_map:: NodeArg ( _) ) => {
1436+ "argument" . to_string ( )
1437+ }
1438+ _ => "local variable" . to_string ( )
1439+ }
1440+ }
1441+ cat_deref( _, _, pk) => {
1442+ let upvar = self . upvar ( ) ;
1443+ match upvar. as_ref ( ) . map ( |i| & i. cat ) {
1444+ Some ( & cat_upvar( ref var) ) => {
1445+ upvar_to_string ( var, false )
1446+ }
1447+ Some ( _) => unreachable ! ( ) ,
1448+ None => {
1449+ match pk {
1450+ Implicit ( ..) => {
1451+ "dereference (dereference is implicit, due to indexing)" . to_string ( )
1452+ }
1453+ Unique => format ! ( "dereference of `{}`" , ptr_sigil( pk) ) ,
1454+ _ => format ! ( "dereference of `{}`-pointer" , ptr_sigil( pk) )
1455+ }
1456+ }
1457+ }
1458+ }
1459+ cat_interior( _, InteriorField ( NamedField ( _) ) ) => {
1460+ "field" . to_string ( )
1461+ }
1462+ cat_interior( _, InteriorField ( PositionalField ( _) ) ) => {
1463+ "anonymous field" . to_string ( )
1464+ }
1465+ cat_interior( _, InteriorElement ( VecElement ) ) => {
1466+ "vec content" . to_string ( )
1467+ }
1468+ cat_interior( _, InteriorElement ( OtherElement ) ) => {
1469+ "indexed content" . to_string ( )
1470+ }
1471+ cat_upvar( ref var) => {
1472+ upvar_to_string ( var, true )
1473+ }
1474+ cat_downcast( ref cmt, _) => {
1475+ cmt. descriptive_string ( tcx)
1476+ }
1477+ }
1478+ }
14771479}
14781480
14791481impl < ' tcx > Repr < ' tcx > for cmt_ < ' tcx > {
0 commit comments