@@ -2488,11 +2488,39 @@ fn iter_structural_ty_full(&@block_ctxt cx, ValueRef av, ValueRef bv,
2488
2488
auto b_elem_i8 = bcx. build. PointerCast ( b_elem, T_ptr ( T_i8 ( ) ) ) ;
2489
2489
auto b_end_i8 = bcx. build. GEP ( b_elem_i8, [ len] ) ;
2490
2490
auto b_end = bcx. build. PointerCast ( b_end_i8, T_ptr ( llunitty) ) ;
2491
+
2492
+ auto dest_elem_ptr = alloca( bcx, T_ptr ( llunitty) ) ;
2493
+ auto src_elem_ptr = alloca( bcx, T_ptr ( llunitty) ) ;
2494
+ bcx. build. Store ( a_elem, dest_elem_ptr) ;
2495
+ bcx. build. Store ( b_elem, src_elem_ptr) ;
2496
+
2491
2497
// Now perform the iteration.
2498
+ auto loop_header_cx = new_sub_block_ctxt( bcx,
2499
+ "iter_ivec_loop_header") ;
2500
+ bcx. build. Br ( loop_header_cx. llbb) ;
2501
+ auto dest_elem = loop_header_cx. build. Load ( dest_elem_ptr) ;
2502
+ auto src_elem = loop_header_cx. build. Load ( src_elem_ptr) ;
2503
+ auto not_yet_at_end = loop_header_cx. build. ICmp ( lib:: llvm:: LLVMIntULT ,
2504
+ dest_elem, b_end) ;
2505
+ auto loop_body_cx = new_sub_block_ctxt( bcx, "iter_ivec_loop_body") ;
2506
+ auto next_cx = new_sub_block_ctxt( bcx, "iter_ivec_next") ;
2507
+ loop_header_cx. build. CondBr ( not_yet_at_end, loop_body_cx. llbb,
2508
+ next_cx. llbb) ;
2509
+
2510
+ rslt = f( loop_body_cx,
2511
+ load_if_immediate( loop_body_cx, dest_elem, unit_ty) ,
2512
+ load_if_immediate( loop_body_cx, src_elem, unit_ty) , unit_ty) ;
2513
+
2514
+ loop_body_cx = rslt. bcx;
2515
+ loop_body_cx. build. Store ( loop_body_cx. build. InBoundsGEP ( dest_elem,
2516
+ [ C_int ( 1 ) ] ) , dest_elem_ptr) ;
2517
+ loop_body_cx. build. Store ( loop_body_cx. build. InBoundsGEP ( src_elem,
2518
+ [ C_int ( 1 ) ] ) , src_elem_ptr) ;
2519
+ loop_body_cx. build. Br ( loop_header_cx. llbb) ;
2492
2520
2493
- auto vpf = bind adapter( _, _, _, unit_ty, f) ;
2494
- ret iter_sequence_raw( bcx, a_elem, b_elem, b_end, unit_sz, vpf) ;
2521
+ ret res( next_cx, C_nil ( ) ) ;
2495
2522
}
2523
+
2496
2524
let result r = res( cx, C_nil ( ) ) ;
2497
2525
alt ( ty:: struct ( cx. fcx. lcx. ccx. tcx, t) ) {
2498
2526
case ( ty:: ty_tup( ?args) ) {
0 commit comments