@@ -241,12 +241,12 @@ pub fn cat_expr_autoderefd(
241
241
tcx : ty:: ctxt ,
242
242
method_map : typeck:: method_map ,
243
243
expr : @ast:: expr ,
244
- adj : @ty :: AutoAdjustment ) -> cmt {
245
-
244
+ autoderefs : uint ) -> cmt
245
+ {
246
246
let mcx = & mem_categorization_ctxt {
247
247
tcx : tcx, method_map : method_map
248
248
} ;
249
- return mcx. cat_expr_autoderefd ( expr, adj ) ;
249
+ return mcx. cat_expr_autoderefd ( expr, autoderefs ) ;
250
250
}
251
251
252
252
pub fn cat_def (
@@ -361,28 +361,38 @@ pub impl mem_categorization_ctxt {
361
361
self . cat_expr_unadjusted ( expr)
362
362
}
363
363
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)
377
387
}
378
388
}
379
389
}
380
390
381
391
fn cat_expr_autoderefd( & self ,
382
392
expr: @ast:: expr,
383
- adjustment : & ty :: AutoAdjustment ) -> cmt {
393
+ autoderefs : uint ) -> cmt {
384
394
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| {
386
396
cmt = self . cat_deref( expr, cmt, deref) ;
387
397
}
388
398
return cmt;
0 commit comments