X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Fmatita%2FmatitaScript.ml;h=af38ff8c2c86589f306cfcdcebb2cf644f12a7ff;hb=7aa0e7901b71a660c6d6f55d96a38a3a9d1d3c7d;hp=63a6ed007aab91a4f09f8e4f63c4075b6fd6b9f4;hpb=4d50bcfc9827bdb6d298b4874d850e2012b5874f;p=helm.git diff --git a/helm/matita/matitaScript.ml b/helm/matita/matitaScript.ml index 63a6ed007..af38ff8c2 100644 --- a/helm/matita/matitaScript.ml +++ b/helm/matita/matitaScript.ml @@ -77,10 +77,11 @@ let eval_with_engine status user_goal parsed_text st = match status.proof_status with | Incomplete_proof (_, goal) when goal <> user_goal -> goal_changed := true; - MatitaEngine.eval_ast status (goal_ast user_goal) + MatitaEngine.eval_ast + ~do_heavy_checks:true status (goal_ast user_goal) | _ -> status in - let new_status = MatitaEngine.eval_ast status st in + let new_status = MatitaEngine.eval_ast ~do_heavy_checks:true status st in let new_aliases = match ex with | TA.Command (_, TA.Alias _) @@ -345,7 +346,7 @@ object (self) (** goal as seen by the user (i.e. metano corresponding to current tab) *) val mutable userGoal = ~-1 - + val mutable lock_mark_pos = 0 (** text mark and tag representing locked part of a script *) val locked_mark = @@ -396,18 +397,23 @@ List.iter (fun s -> prerr_endline ("'" ^ s ^ "'")) new_statements; try self#_advance ?statement (); self#notify - with Margin -> self#notify + with + | Margin -> self#notify + | exc -> self#notify; raise exc method retract () = try self#_retract (); self#notify - with Margin -> self#notify + with + | Margin -> self#notify + | exc -> self#notify; raise exc method private getFuture = buffer#get_text ~start:(buffer#get_iter_at_mark (`MARK locked_mark)) ~stop:buffer#end_iter () + (** @param rel_offset relative offset from current position of locked_mark *) method private moveMark rel_offset = let mark = `MARK locked_mark in @@ -422,6 +428,7 @@ List.iter (fun s -> prerr_endline ("'" ^ s ^ "'")) new_statements; in buffer#move_mark mark ~where:new_mark_pos; buffer#apply_tag locked_tag ~start:buffer#start_iter ~stop:new_mark_pos; + lock_mark_pos <- new_mark_pos#offset; buffer#move_mark `INSERT old_insert; begin match self#status.proof_status with @@ -430,6 +437,11 @@ List.iter (fun s -> prerr_endline ("'" ^ s ^ "'")) new_statements; end ; while Glib.Main.pending () do ignore(Glib.Main.iteration false); done + method clean_dirty_lock = + let lock_mark_iter = buffer#get_iter (`OFFSET lock_mark_pos) in + buffer#remove_tag locked_tag ~start:buffer#start_iter ~stop:buffer#end_iter; + buffer#apply_tag locked_tag ~start:buffer#start_iter ~stop:lock_mark_iter + val mutable observers = [] method addObserver (o: MatitaTypes.status -> unit) = @@ -499,7 +511,9 @@ List.iter (fun s -> prerr_endline ("'" ^ s ^ "'")) new_statements; in dowhile (getpos ()); self#notify - with Margin -> self#notify) + with + | Margin -> self#notify + | exc -> self#notify; raise exc) | `Cursor -> let locked_iter () = buffer#get_iter_at_mark (`NAME "locked") in let cursor_iter () = buffer#get_iter_at_mark `INSERT in @@ -521,8 +535,10 @@ List.iter (fun s -> prerr_endline ("'" ^ s ^ "'")) new_statements; (back_until_cursor (); self#notify) else (* cursor = locked *) () - with Margin -> self#notify) - + with + | Margin -> self#notify + | exc -> self#notify; raise exc) + method onGoingProof () = match self#status.proof_status with | No_proof | Proof _ -> false