method after_output =
    (* Advance the memo frame. *)
    self#advance ;
    (* Propagate to all sub-sources, i.e. our children and the transitions
     * wrapping them:
     *  - current transition is [selected],
     *  - old one in [to_finish]. *)

    List.iter (fun s -> s.source#after_output) cases ;
    begin match selected with
      | None -> ()
      | Some (_,s) -> s#after_output
    end ;
    List.iter (fun s -> s#after_output) to_finish ;
    to_finish <- [] ;
    (* Selection may have been triggered by a call to #is_ready, without
     * any call to #get_ready (in particular if #select returned None).
     * It is cleared here in order to get a chance to be re-computed later. *)

    cached_selected <- None