- let s = match statement with Some s -> s | None -> self#getFuture in
- MatitaLog.debug ("evaluating: " ^ first_line s ^ " ...");
- let (entries, parsed_len) =
- eval_statement guistuff self#status userGoal self s
- in
- let (new_statuses, new_statements) = List.split entries in
-(*
-prerr_endline "evalStatement returned";
-List.iter (fun s -> prerr_endline ("'" ^ s ^ "'")) new_statements;
-*)
- history <- List.rev new_statuses @ history;
- statements <- List.rev new_statements @ statements;
- let start = buffer#get_iter_at_mark (`MARK locked_mark) in
- let new_text = String.concat "" new_statements in
- if new_text <> String.sub s 0 parsed_len then
- begin
-(* prerr_endline ("new:" ^ new_text); *)
-(* prerr_endline ("s:" ^ String.sub s 0 parsed_len); *)
- let stop = start#copy#forward_chars parsed_len in
- buffer#delete ~start ~stop;
- buffer#insert ~iter:start new_text;
-(* prerr_endline "AUTOMATICALLY MODIFIED!!!!!" *)
+ let rec aux st =
+ let (entries, parsed_len) =
+ eval_statement buffer guistuff self#status userGoal self st
+ in
+ let (new_statuses, new_statements, new_asts) =
+ let statuses, statements = List.split entries in
+ let texts, asts = List.split statements in
+ statuses, texts, asts
+ in
+ history <- List.rev new_statuses @ history;
+ statements <- List.rev new_statements @ statements;
+ let start = buffer#get_iter_at_mark (`MARK locked_mark) in
+ let new_text = String.concat "" new_statements in
+ if statement <> None then
+ buffer#insert ~iter:start new_text
+ else begin
+ let s = match st with `Raw s | `Ast (_, s) -> s in
+ if new_text <> String.sub s 0 parsed_len then begin
+ buffer#delete ~start ~stop:(start#copy#forward_chars parsed_len);
+ buffer#insert ~iter:start new_text;
+ end;