(************************************************************************) (* * The Coq Proof Assistant / The Coq Development Team *) (* v * Copyright INRIA, CNRS and contributors *) (* Pp.str "!" | SelectAll -> Pp.str "all" | SelectNth i -> Pp.int i | SelectList l -> Pp.(str "[" ++ prlist_with_sep pr_comma pr_range_selector l ++ str "]") | SelectId id -> Names.Id.print id let parse_goal_selector = function | "!" -> SelectAlreadyFocused | "all" -> SelectAll | i -> let err_msg = "The default selector must be \"all\", \"!\" or a natural number." in begin try let i = int_of_string i in if i < 0 then CErrors.user_err Pp.(str err_msg); SelectNth i with Failure _ -> CErrors.user_err Pp.(str err_msg) end (* Default goal selector: selector chosen when a tactic is applied without an explicit selector. *) let get_default_goal_selector = Goptions.declare_interpreted_string_option_and_ref ~depr:false ~key:["Default";"Goal";"Selector"] ~value:(SelectNth 1) parse_goal_selector (fun v -> Pp.string_of_ppcmds @@ pr_goal_selector v) (* Select a subset of the goals *) let tclSELECT ?nosuchgoal g tac = match g with | SelectNth i -> Proofview.tclFOCUS ?nosuchgoal i i tac | SelectList l -> Proofview.tclFOCUSLIST ?nosuchgoal l tac | SelectId id -> Proofview.tclFOCUSID ?nosuchgoal id tac | SelectAll -> tac | SelectAlreadyFocused -> let open Proofview.Notations in Proofview.numgoals >>= fun n -> if n == 1 then tac else let e = CErrors.UserError (None, Pp.(str "Expected a single focused goal but " ++ int n ++ str " goals are focused.")) in let info = Exninfo.reify () in Proofview.tclZERO ~info e