aboutsummaryrefslogtreecommitdiffhomepage
path: root/ide/coq.ml
diff options
context:
space:
mode:
Diffstat (limited to 'ide/coq.ml')
-rw-r--r--ide/coq.ml50
1 files changed, 34 insertions, 16 deletions
diff --git a/ide/coq.ml b/ide/coq.ml
index d8e0a04c2..54a0e4736 100644
--- a/ide/coq.ml
+++ b/ide/coq.ml
@@ -103,24 +103,42 @@ let user_error_loc l s =
let interp s =
prerr_endline "Starting interp...";
prerr_endline s;
- let pe = Pcoq.Gram.Entry.parse
- Pcoq.main_entry
- (Pcoq.Gram.parsable (Stream.of_string s))
- in match pe with
- | Some (loc,( VernacDefinition _ | VernacStartTheoremProof _
- | VernacBeginSection _ | VernacGoal _
- | VernacDefineModule _ | VernacDeclareModuleType _))
- when is_in_proof_mode () ->
- user_error_loc loc (str "cannot do that while in proof mode.")
- | Some (loc, VernacDebug _ ) ->
- user_error_loc loc (str "cannot do that within CoqIDE")
- | _ ->
- Vernac.raw_do_vernac (Pcoq.Gram.parsable (Stream.of_string s));
- match pe with
- | Some last ->
+ let pa = Pcoq.Gram.parsable (Stream.of_string s) in
+ let pe = Pcoq.Gram.Entry.parse Pcoq.main_entry pa in
+ match pe with
+ | None -> assert false
+ | Some((loc,vernac) as last) ->
+ match vernac with
+ | VernacDefinition _ | VernacStartTheoremProof _
+ | VernacBeginSection _ | VernacGoal _
+ | VernacDefineModule _ | VernacDeclareModuleType _
+ when is_in_proof_mode () ->
+ user_error_loc loc (str "CoqIDE do not support nested goals")
+ | VernacDebug _ ->
+ user_error_loc loc (str "Debug mode not available within CoqIDE")
+ | VernacResetName _
+ | VernacResetInitial
+ | VernacBack _
+ | VernacAbort _
+ | VernacAbortAll
+ | VernacRestart
+ | VernacSuspend
+ | VernacResume _
+ | VernacUndo _ ->
+ user_error_loc loc (str "Use CoqIDE navigation instead")
+ | _ ->
+ begin
+ match vernac with
+ | VernacPrintOption _
+ | VernacCheckMayEval _
+ | VernacGlobalCheck _
+ | VernacPrint _
+ | VernacSearch _ -> ()
+ | _ -> ()
+ end;
+ Vernac.raw_do_vernac (Pcoq.Gram.parsable (Stream.of_string s));
prerr_endline ("...Done with interp of : "^s);
last
- | None -> assert false
let interp_and_replace s =
let result = interp s in