@@ -480,22 +480,8 @@ impl <'a, I: Iterator> VerusForLoopWrapper<'a, I> {
480480 // History updates always hold
481481 ret matches Some ( i) ==> final( self ) . history@ == old( self ) . history@. push( i) ,
482482 ret is None ==> final( self ) . history@ == old( self ) . history@,
483- // TODO: Uncomment this line to replace everything below, once general mutable refs are supported
484- //call_ensures(I::next, (old(self).iter,), ret),
485- final( self ) . iter. obeys_prophetic_iter_laws( ) == old( self ) . iter. obeys_prophetic_iter_laws( ) ,
486- final( self ) . iter. obeys_prophetic_iter_laws( ) ==> final( self ) . iter. will_return_none( ) == old( self ) . iter. will_return_none( ) ,
487- final( self ) . iter. obeys_prophetic_iter_laws( ) ==> ( old( self ) . iter. decrease( ) is Some <==> final( self ) . iter. decrease( ) is Some ) ,
488- final( self ) . iter. obeys_prophetic_iter_laws( ) ==>
489- ( {
490- if old( self ) . iter. remaining( ) . len( ) > 0 {
491- &&& final( self ) . iter. remaining( ) == old( self ) . iter. remaining( ) . drop_first( )
492- &&& ret == Some ( old( self ) . iter. remaining( ) [ 0 ] )
493- } else {
494- final( self ) . iter. remaining( ) == old( self ) . iter. remaining( ) && ret == None && final( self ) . iter. will_return_none( )
495- }
496- } ) ,
497- final( self ) . iter. obeys_prophetic_iter_laws( ) && old( self ) . iter. remaining( ) . len( ) > 0 && final( self ) . iter. decrease( ) is Some ==>
498- decreases_to!( old( self ) . iter. decrease( ) ->0 => final( self ) . iter. decrease( ) ->0 ) ,
483+ // All of the standard Iterator::next guarantees still hold
484+ exists |m: & mut I | #![ auto] call_ensures( I :: next, ( m, ) , ret) && * m == old( self ) . iter && * final( m) == final( self ) . iter,
499485 {
500486 let ghost old_history = self . history@;
501487 let ret = self . iter. next( ) ;
0 commit comments