@@ -10,7 +10,7 @@ import syntax::ast::*;
10
10
import syntax:: ast_util:: * ;
11
11
import syntax:: codemap:: span;
12
12
import middle:: ty:: { expr_ty, type_is_bot} ;
13
- import util:: common:: { field_exprs , has_nonlocal_exits } ;
13
+ import util:: common:: * ;
14
14
import driver:: session:: session;
15
15
16
16
fn forbid_upvar ( fcx : fn_ctxt , rhs_id : node_id , sp : span , t : oper_type ) {
@@ -384,20 +384,19 @@ fn find_pre_post_state_expr(fcx: fn_ctxt, pres: prestate, e: @expr) -> bool {
384
384
set_poststate_ann ( fcx. ccx , e. id , block_poststate ( fcx. ccx , b) ) ;
385
385
}
386
386
expr_rec ( fields, maybe_base) {
387
+ let exs = field_exprs ( fields) ;
387
388
let changed =
388
389
find_pre_post_state_exprs ( fcx, pres, e. id ,
389
390
vec:: init_elt ( init_assign,
390
391
vec:: len ( fields) ) ,
391
- field_exprs ( fields) , return_val) ;
392
- alt maybe_base {
393
- none { /* do nothing */ }
394
- some( base) {
395
- changed |=
396
- find_pre_post_state_expr ( fcx, pres, base) |
397
- set_poststate_ann ( fcx. ccx , e. id ,
398
- expr_poststate ( fcx. ccx , base) ) ;
399
- }
400
- }
392
+ exs, return_val) ;
393
+
394
+ let base_pres = alt vec:: last ( exs) { none { pres }
395
+ some( f) { expr_poststate ( fcx. ccx , f) } } ;
396
+ option:: may ( maybe_base, { |base|
397
+ changed |= find_pre_post_state_expr ( fcx, base_pres, base) |
398
+ set_poststate_ann ( fcx. ccx , e. id ,
399
+ expr_poststate ( fcx. ccx , base) ) } ) ;
401
400
ret changed;
402
401
}
403
402
expr_tup ( elts) {
@@ -591,12 +590,8 @@ fn find_pre_post_state_expr(fcx: fn_ctxt, pres: prestate, e: @expr) -> bool {
591
590
}
592
591
ret set_prestate_ann ( fcx. ccx , e. id , pres) |
593
592
set_poststate_ann ( fcx. ccx , e. id , post) |
594
- alt maybe_fail_val {
595
- none { false }
596
- some( fail_val) {
597
- find_pre_post_state_expr( fcx, pres , fail_val)
598
- }
599
- }
593
+ option:: maybe ( false , maybe_fail_val, { |fail_val|
594
+ find_pre_post_state_expr ( fcx, pres, fail_val) } ) ;
600
595
}
601
596
expr_assert ( p) {
602
597
ret find_pre_post_state_sub ( fcx, pres, p, e. id , none) ;
@@ -617,18 +612,14 @@ fn find_pre_post_state_expr(fcx: fn_ctxt, pres: prestate, e: @expr) -> bool {
617
612
fn find_pre_post_state_stmt( fcx: fn_ctxt , pres : prestate , s : @stmt) -> bool {
618
613
let stmt_ann = stmt_to_ann ( fcx. ccx , * s) ;
619
614
620
- /*
621
- log(error, ("[" + fcx.name + "]"));
622
- #error("*At beginning: stmt = ");
623
- log_stmt_err(*s);
624
- #error("*prestate = ");
625
- log_tritv_err(fcx, stmt_ann.states.prestate);
626
- #error("*poststate =");
627
- log_tritv_err(fcx, stmt_ann.states.poststate);
628
- #error("pres = ");
629
- log_tritv_err(fcx, pres);
630
- */
631
-
615
+ log ( debug, "[" + fcx. name + "]" ) ;
616
+ #debug ( "*At beginning: stmt = " ) ;
617
+ log_stmt ( * s) ;
618
+ #debug ( "*prestate = " ) ;
619
+ log ( debug, tritv:: to_str ( stmt_ann. states . prestate ) ) ;
620
+ #debug ( "*poststate =" ) ;
621
+ log ( debug, tritv:: to_str ( stmt_ann. states . prestate ) ) ;
622
+
632
623
alt s. node {
633
624
stmt_decl ( adecl, id) {
634
625
alt adecl. node {
@@ -643,16 +634,14 @@ fn find_pre_post_state_stmt(fcx: fn_ctxt, pres: prestate, s: @stmt) -> bool {
643
634
let changed =
644
635
set_poststate ( stmt_ann, c_and_p. post ) | c_and_p. changed ;
645
636
646
- /*
647
- #error("Summary: stmt = ");
648
- log_stmt_err(*s);
649
- #error("prestate = ");
650
- log_tritv_err(fcx, stmt_ann.states.prestate);
651
- #error("poststate =");
652
- log_tritv_err(fcx, stmt_ann.states.poststate);
653
- #error("changed =");
654
- log(error, changed);
655
- */
637
+ #debug ( "Summary: stmt = " ) ;
638
+ log_stmt ( * s) ;
639
+ #debug ( "prestate = " ) ;
640
+ log ( debug, tritv:: to_str ( stmt_ann. states . prestate ) ) ;
641
+ #debug ( "poststate =" ) ;
642
+ log ( debug, tritv:: to_str ( stmt_ann. states . prestate ) ) ;
643
+ #debug ( "changed =" ) ;
644
+ log ( debug, changed) ;
656
645
657
646
ret changed;
658
647
}
@@ -668,17 +657,14 @@ fn find_pre_post_state_stmt(fcx: fn_ctxt, pres: prestate, s: @stmt) -> bool {
668
657
set_prestate ( stmt_ann, expr_prestate ( fcx. ccx , ex) ) |
669
658
set_poststate ( stmt_ann, expr_poststate ( fcx. ccx , ex) ) ;
670
659
671
- /*
672
- #error("Finally:");
673
- log_stmt_err(*s);
674
- log_err("prestate = ");
675
- log_err(bitv::to_str(stmt_ann.states.prestate));
676
- log_tritv_err(fcx, stmt_ann.states.prestate);
677
- log_err("poststate =");
678
- log_err(bitv::to_str(stmt_ann.states.poststate));
679
- log_tritv_err(fcx, stmt_ann.states.poststate);
680
- log_err("changed =");
681
- */
660
+
661
+ #debug ( "Finally:" ) ;
662
+ log_stmt ( * s) ;
663
+ log ( debug, "prestate = " ) ;
664
+ log ( debug, tritv:: to_str ( stmt_ann. states . prestate ) ) ;
665
+ #debug ( "poststate =" ) ;
666
+ log ( debug, ( tritv:: to_str ( stmt_ann. states . poststate ) ) ) ;
667
+ #debug ( "changed =" ) ;
682
668
683
669
ret changed;
684
670
}
0 commit comments