@@ -27,7 +27,6 @@ use middle::trans::base;
27
27
use middle:: trans:: base:: * ;
28
28
use middle:: trans:: build:: * ;
29
29
use middle:: trans:: callee;
30
- use middle:: trans:: closure;
31
30
use middle:: trans:: common;
32
31
use middle:: trans:: common:: * ;
33
32
use middle:: trans:: datum:: * ;
@@ -556,29 +555,9 @@ pub fn trans_call_inner(in_cx: @mut Block,
556
555
autoref_arg : AutorefArg )
557
556
-> Result {
558
557
do base:: with_scope_result ( in_cx, call_info, "call" ) |cx| {
559
- let ret_in_loop = match args {
560
- ArgExprs ( args) => {
561
- args. len ( ) > 0 u && match args. last ( ) . node {
562
- ast:: expr_loop_body( @ast:: expr {
563
- node : ast:: expr_fn_block( _, ref body) ,
564
- _
565
- } ) => body_contains_ret ( body) ,
566
- _ => false
567
- }
568
- }
569
- _ => false
570
- } ;
571
-
572
558
let callee = get_callee ( cx) ;
573
559
let mut bcx = callee. bcx ;
574
560
let ccx = cx. ccx ( ) ;
575
- let ret_flag = if ret_in_loop {
576
- let flag = alloca ( bcx, Type :: bool ( ) , "__ret_flag" ) ;
577
- Store ( bcx, C_bool ( false ) , flag) ;
578
- Some ( flag)
579
- } else {
580
- None
581
- } ;
582
561
583
562
let ( llfn, llenv) = unsafe {
584
563
match callee. data {
@@ -611,9 +590,7 @@ pub fn trans_call_inner(in_cx: @mut Block,
611
590
}
612
591
613
592
llargs. push ( llenv) ;
614
- bcx = trans_args ( bcx, args, fn_expr_ty,
615
- ret_flag, autoref_arg, & mut llargs) ;
616
-
593
+ bcx = trans_args ( bcx, args, fn_expr_ty, autoref_arg, & mut llargs) ;
617
594
618
595
// Now that the arguments have finished evaluating, we need to revoke
619
596
// the cleanup for the self argument
@@ -667,20 +644,6 @@ pub fn trans_call_inner(in_cx: @mut Block,
667
644
668
645
if ty:: type_is_bot ( ret_ty) {
669
646
Unreachable ( bcx) ;
670
- } else if ret_in_loop {
671
- let ret_flag_result = bool_to_i1 ( bcx, Load ( bcx, ret_flag. get ( ) ) ) ;
672
- bcx = do with_cond ( bcx, ret_flag_result) |bcx| {
673
- {
674
- let r = bcx. fcx . loop_ret ;
675
- for & ( flagptr, _) in r. iter ( ) {
676
- Store ( bcx, C_bool ( true ) , flagptr) ;
677
- Store ( bcx, C_bool ( false ) , bcx. fcx . llretptr . get ( ) ) ;
678
- }
679
- }
680
- base:: cleanup_and_leave ( bcx, None , Some ( bcx. fcx . get_llreturn ( ) ) ) ;
681
- Unreachable ( bcx) ;
682
- bcx
683
- }
684
647
}
685
648
rslt ( bcx, llresult)
686
649
}
@@ -713,7 +676,6 @@ pub fn trans_ret_slot(bcx: @mut Block, fn_ty: ty::t, dest: Option<expr::Dest>)
713
676
pub fn trans_args ( cx : @mut Block ,
714
677
args : CallArgs ,
715
678
fn_ty : ty:: t ,
716
- ret_flag : Option < ValueRef > ,
717
679
autoref_arg : AutorefArg ,
718
680
llargs : & mut ~[ ValueRef ] ) -> @mut Block
719
681
{
@@ -728,15 +690,13 @@ pub fn trans_args(cx: @mut Block,
728
690
// to cast her view of the arguments to the caller's view.
729
691
match args {
730
692
ArgExprs ( arg_exprs) => {
731
- let last = arg_exprs. len ( ) - 1 u;
732
693
for ( i, arg_expr) in arg_exprs. iter ( ) . enumerate ( ) {
733
694
let arg_val = unpack_result ! ( bcx, {
734
695
trans_arg_expr( bcx,
735
696
arg_tys[ i] ,
736
697
ty:: ByCopy ,
737
698
* arg_expr,
738
699
& mut temp_cleanups,
739
- if i == last { ret_flag } else { None } ,
740
700
autoref_arg)
741
701
} ) ;
742
702
llargs. push ( arg_val) ;
@@ -769,49 +729,17 @@ pub fn trans_arg_expr(bcx: @mut Block,
769
729
self_mode : ty:: SelfMode ,
770
730
arg_expr : @ast:: expr ,
771
731
temp_cleanups : & mut ~[ ValueRef ] ,
772
- ret_flag : Option < ValueRef > ,
773
732
autoref_arg : AutorefArg ) -> Result {
774
733
let _icx = push_ctxt ( "trans_arg_expr" ) ;
775
734
let ccx = bcx. ccx ( ) ;
776
735
777
- debug ! ( "trans_arg_expr(formal_arg_ty=(%s), self_mode=%?, arg_expr=%s, \
778
- ret_flag=%?)",
736
+ debug ! ( "trans_arg_expr(formal_arg_ty=(%s), self_mode=%?, arg_expr=%s)" ,
779
737
formal_arg_ty. repr( bcx. tcx( ) ) ,
780
738
self_mode,
781
- arg_expr. repr( bcx. tcx( ) ) ,
782
- ret_flag. map( |v| bcx. val_to_str( * v) ) ) ;
739
+ arg_expr. repr( bcx. tcx( ) ) ) ;
783
740
784
741
// translate the arg expr to a datum
785
- let arg_datumblock = match ret_flag {
786
- None => expr:: trans_to_datum ( bcx, arg_expr) ,
787
-
788
- // If there is a ret_flag, this *must* be a loop body
789
- Some ( _) => {
790
- match arg_expr. node {
791
- ast:: expr_loop_body(
792
- blk @ @ast:: expr {
793
- node : ast:: expr_fn_block( ref decl, ref body) ,
794
- _
795
- } ) => {
796
- let scratch_ty = expr_ty ( bcx, arg_expr) ;
797
- let scratch = alloc_ty ( bcx, scratch_ty, "__ret_flag" ) ;
798
- let arg_ty = expr_ty ( bcx, arg_expr) ;
799
- let sigil = ty:: ty_closure_sigil ( arg_ty) ;
800
- let bcx = closure:: trans_expr_fn (
801
- bcx, sigil, decl, body, arg_expr. id ,
802
- blk. id , Some ( ret_flag) , expr:: SaveIn ( scratch) ) ;
803
- DatumBlock { bcx : bcx,
804
- datum : Datum { val : scratch,
805
- ty : scratch_ty,
806
- mode : ByRef ( RevokeClean ) } }
807
- }
808
- _ => {
809
- bcx. sess ( ) . impossible_case (
810
- arg_expr. span , "ret_flag with non-loop-body expr" ) ;
811
- }
812
- }
813
- }
814
- } ;
742
+ let arg_datumblock = expr:: trans_to_datum ( bcx, arg_expr) ;
815
743
let arg_datum = arg_datumblock. datum ;
816
744
let bcx = arg_datumblock. bcx ;
817
745
0 commit comments