@@ -241,12 +241,12 @@ pub fn cat_expr_autoderefd(
241241 tcx : ty:: ctxt ,
242242 method_map : typeck:: method_map ,
243243 expr : @ast:: expr ,
244- adj : @ty :: AutoAdjustment ) -> cmt {
245-
244+ autoderefs : uint ) -> cmt
245+ {
246246 let mcx = & mem_categorization_ctxt {
247247 tcx : tcx, method_map : method_map
248248 } ;
249- return mcx. cat_expr_autoderefd ( expr, adj ) ;
249+ return mcx. cat_expr_autoderefd ( expr, autoderefs ) ;
250250}
251251
252252pub fn cat_def (
@@ -361,28 +361,38 @@ pub impl mem_categorization_ctxt {
361361 self . cat_expr_unadjusted ( expr)
362362 }
363363
364- Some ( adjustment) => {
365- match adjustment. autoref {
366- Some ( _) => {
367- // Equivalent to &*expr or something similar.
368- // This is an rvalue, effectively.
369- let expr_ty = ty:: expr_ty ( self . tcx , expr) ;
370- self . cat_rvalue ( expr, expr_ty)
371- }
372- None => {
373- // Equivalent to *expr or something similar.
374- self . cat_expr_autoderefd ( expr, adjustment)
375- }
376- }
364+ Some ( @ty:: AutoAddEnv ( * ) ) => {
365+ // Convert a bare fn to a closure by adding NULL env.
366+ // Result is an rvalue.
367+ let expr_ty = ty:: expr_ty_adjusted ( self . tcx , expr) ;
368+ self . cat_rvalue ( expr, expr_ty)
369+ }
370+
371+ Some (
372+ @ty:: AutoDerefRef (
373+ ty:: AutoDerefRef {
374+ autoref : Some ( _) , _} ) ) => {
375+ // Equivalent to &*expr or something similar.
376+ // Result is an rvalue.
377+ let expr_ty = ty:: expr_ty_adjusted ( self . tcx , expr) ;
378+ self . cat_rvalue ( expr, expr_ty)
379+ }
380+
381+ Some (
382+ @ty:: AutoDerefRef (
383+ ty:: AutoDerefRef {
384+ autoref : None , autoderefs : autoderefs} ) ) => {
385+ // Equivalent to *expr or something similar.
386+ self . cat_expr_autoderefd ( expr, autoderefs)
377387 }
378388 }
379389 }
380390
381391 fn cat_expr_autoderefd( & self ,
382392 expr: @ast:: expr,
383- adjustment : & ty :: AutoAdjustment ) -> cmt {
393+ autoderefs : uint ) -> cmt {
384394 let mut cmt = self . cat_expr_unadjusted ( expr) ;
385- for uint:: range( 1 , adjustment . autoderefs+1 ) |deref| {
395+ for uint:: range( 1 , autoderefs+1 ) |deref| {
386396 cmt = self . cat_deref( expr, cmt, deref) ;
387397 }
388398 return cmt;
0 commit comments