@@ -3392,7 +3392,8 @@ fn float_cast(bcx: @block_ctxt, lldsttype: TypeRef, llsrctype: TypeRef,
3392
3392
} else { llsrc } ;
3393
3393
}
3394
3394
3395
- fn trans_cast ( cx : @block_ctxt , e : @ast:: expr , id : ast:: node_id ) -> result {
3395
+ fn trans_cast ( cx : @block_ctxt , e : @ast:: expr , id : ast:: node_id ,
3396
+ dest : dest ) -> @block_ctxt {
3396
3397
let ccx = bcx_ccx ( cx) ;
3397
3398
let e_res = trans_expr ( cx, e) ;
3398
3399
let ll_t_in = val_ty ( e_res. val ) ;
@@ -3446,7 +3447,7 @@ fn trans_cast(cx: @block_ctxt, e: @ast::expr, id: ast::node_id) -> result {
3446
3447
}
3447
3448
_ { ccx. sess . bug ( "Translating unsupported cast." ) }
3448
3449
} ;
3449
- ret rslt ( e_res. bcx , newval) ;
3450
+ ret store_in_dest ( e_res. bcx , newval, dest ) ;
3450
3451
}
3451
3452
3452
3453
// pth is cx.path
@@ -4188,22 +4189,6 @@ fn trans_rec(bcx: @block_ctxt, fields: [ast::field],
4188
4189
fn trans_expr ( cx : @block_ctxt , e : @ast:: expr ) -> result {
4189
4190
// Fixme Fill in cx.sp
4190
4191
alt e. node {
4191
- ast:: expr_copy ( a) {
4192
- let e_ty = ty:: expr_ty ( bcx_tcx ( cx) , a) ;
4193
- let lv = trans_lval ( cx, a) ;
4194
- let bcx = lv. bcx ;
4195
- if !lv. is_mem { ret { bcx : lv. bcx , val : lv. val } ; }
4196
- let r = if type_is_immediate ( bcx_ccx ( cx) , e_ty) {
4197
- rslt ( bcx, Load ( bcx, lv. val ) )
4198
- } else {
4199
- let { bcx, val: dest } = alloc_ty ( bcx, e_ty) ;
4200
- bcx = copy_val ( bcx, INIT , dest, lv. val , e_ty) ;
4201
- rslt ( bcx, dest)
4202
- } ;
4203
- add_clean_temp ( bcx, r. val , e_ty) ;
4204
- ret r;
4205
- }
4206
- ast:: expr_cast ( val, _) { ret trans_cast ( cx, val, e. id ) ; }
4207
4192
ast:: expr_anon_obj ( anon_obj) {
4208
4193
ret trans_anon_obj ( cx, e. span , anon_obj, e. id ) ;
4209
4194
}
@@ -4283,6 +4268,15 @@ fn trans_expr_dps(bcx: @block_ctxt, e: @ast::expr, dest: dest)
4283
4268
}
4284
4269
ast:: expr_fn ( f) { ret trans_expr_fn ( bcx, f, e. span , e. id , dest) ; }
4285
4270
ast:: expr_bind ( f, args) { ret trans_bind ( bcx, f, args, e. id , dest) ; }
4271
+ ast:: expr_copy ( a) {
4272
+ if !expr_is_lval ( bcx_tcx ( bcx) , a) {
4273
+ ret trans_expr_dps ( bcx, a, dest) ;
4274
+ } else {
4275
+ // FIXME[DPS] give this a name that makes more sense
4276
+ ret trans_expr_backwards_compat ( bcx, e, dest) ;
4277
+ }
4278
+ }
4279
+ ast:: expr_cast ( val, _) { ret trans_cast ( bcx, val, e. id , dest) ; }
4286
4280
4287
4281
// These return nothing
4288
4282
ast:: expr_break. {
0 commit comments