diff options
Diffstat (limited to 'src/g_ltac2.ml4')
| -rw-r--r-- | src/g_ltac2.ml4 | 302 |
1 files changed, 151 insertions, 151 deletions
diff --git a/src/g_ltac2.ml4 b/src/g_ltac2.ml4 index 31eb6d9db5..f4818f4ece 100644 --- a/src/g_ltac2.ml4 +++ b/src/g_ltac2.ml4 @@ -93,17 +93,17 @@ let tac2mode = Gram.entry_create "vernac:ltac2_command" let ltac1_expr = Pltac.tactic_expr -let inj_wit wit loc x = Loc.tag ~loc @@ CTacExt (wit, x) +let inj_wit wit loc x = CAst.make ~loc @@ CTacExt (wit, x) let inj_open_constr loc c = inj_wit Tac2quote.wit_open_constr loc c let inj_pattern loc c = inj_wit Tac2quote.wit_pattern loc c let inj_reference loc c = inj_wit Tac2quote.wit_reference loc c let inj_ltac1 loc e = inj_wit Tac2quote.wit_ltac1 loc e let pattern_of_qualid ?loc id = - if Tac2env.is_constructor (snd id) then Loc.tag ?loc @@ CPatRef (RelId id, []) + if Tac2env.is_constructor id.CAst.v then CAst.make ?loc @@ CPatRef (RelId id, []) else - let (dp, id) = Libnames.repr_qualid (snd id) in - if DirPath.is_empty dp then Loc.tag ?loc @@ CPatVar (Name id) + let (dp, id) = Libnames.repr_qualid id.CAst.v in + if DirPath.is_empty dp then CAst.make ?loc @@ CPatVar (Name id) else CErrors.user_err ?loc (Pp.str "Syntax error") @@ -113,73 +113,73 @@ GEXTEND Gram tac2pat: [ "1" LEFTA [ id = Prim.qualid; pl = LIST1 tac2pat LEVEL "0" -> - if Tac2env.is_constructor (snd id) then - Loc.tag ~loc:!@loc @@ CPatRef (RelId id, pl) + if Tac2env.is_constructor (id.CAst.v) then + CAst.make ~loc:!@loc @@ CPatRef (RelId id, pl) else CErrors.user_err ~loc:!@loc (Pp.str "Syntax error") | id = Prim.qualid -> pattern_of_qualid ~loc:!@loc id - | "["; "]" -> Loc.tag ~loc:!@loc @@ CPatRef (AbsKn (Other Tac2core.Core.c_nil), []) + | "["; "]" -> CAst.make ~loc:!@loc @@ CPatRef (AbsKn (Other Tac2core.Core.c_nil), []) | p1 = tac2pat; "::"; p2 = tac2pat -> - Loc.tag ~loc:!@loc @@ CPatRef (AbsKn (Other Tac2core.Core.c_cons), [p1; p2]) + CAst.make ~loc:!@loc @@ CPatRef (AbsKn (Other Tac2core.Core.c_cons), [p1; p2]) ] | "0" - [ "_" -> Loc.tag ~loc:!@loc @@ CPatVar Anonymous - | "()" -> Loc.tag ~loc:!@loc @@ CPatRef (AbsKn (Tuple 0), []) + [ "_" -> CAst.make ~loc:!@loc @@ CPatVar Anonymous + | "()" -> CAst.make ~loc:!@loc @@ CPatRef (AbsKn (Tuple 0), []) | id = Prim.qualid -> pattern_of_qualid ~loc:!@loc id | "("; p = atomic_tac2pat; ")" -> p ] ] ; atomic_tac2pat: [ [ -> - Loc.tag ~loc:!@loc @@ CPatRef (AbsKn (Tuple 0), []) + CAst.make ~loc:!@loc @@ CPatRef (AbsKn (Tuple 0), []) | p = tac2pat; ":"; t = tac2type -> - Loc.tag ~loc:!@loc @@ CPatCnv (p, t) + CAst.make ~loc:!@loc @@ CPatCnv (p, t) | p = tac2pat; ","; pl = LIST0 tac2pat SEP "," -> let pl = p :: pl in - Loc.tag ~loc:!@loc @@ CPatRef (AbsKn (Tuple (List.length pl)), pl) + CAst.make ~loc:!@loc @@ CPatRef (AbsKn (Tuple (List.length pl)), pl) | p = tac2pat -> p ] ] ; tac2expr: [ "6" RIGHTA - [ e1 = SELF; ";"; e2 = SELF -> Loc.tag ~loc:!@loc @@ CTacSeq (e1, e2) ] + [ e1 = SELF; ";"; e2 = SELF -> CAst.make ~loc:!@loc @@ CTacSeq (e1, e2) ] | "5" [ "fun"; it = LIST1 input_fun ; "=>"; body = tac2expr LEVEL "6" -> - Loc.tag ~loc:!@loc @@ CTacFun (it, body) + CAst.make ~loc:!@loc @@ CTacFun (it, body) | "let"; isrec = rec_flag; lc = LIST1 let_clause SEP "with"; "in"; e = tac2expr LEVEL "6" -> - Loc.tag ~loc:!@loc @@ CTacLet (isrec, lc, e) + CAst.make ~loc:!@loc @@ CTacLet (isrec, lc, e) | "match"; e = tac2expr LEVEL "5"; "with"; bl = branches; "end" -> - Loc.tag ~loc:!@loc @@ CTacCse (e, bl) + CAst.make ~loc:!@loc @@ CTacCse (e, bl) ] | "4" LEFTA [ ] | "::" RIGHTA [ e1 = tac2expr; "::"; e2 = tac2expr -> - Loc.tag ~loc:!@loc @@ CTacApp (Loc.tag ~loc:!@loc @@ CTacCst (AbsKn (Other Tac2core.Core.c_cons)), [e1; e2]) + CAst.make ~loc:!@loc @@ CTacApp (CAst.make ~loc:!@loc @@ CTacCst (AbsKn (Other Tac2core.Core.c_cons)), [e1; e2]) ] | [ e0 = SELF; ","; el = LIST1 NEXT SEP "," -> let el = e0 :: el in - Loc.tag ~loc:!@loc @@ CTacApp (Loc.tag ~loc:!@loc @@ CTacCst (AbsKn (Tuple (List.length el))), el) ] + CAst.make ~loc:!@loc @@ CTacApp (CAst.make ~loc:!@loc @@ CTacCst (AbsKn (Tuple (List.length el))), el) ] | "1" LEFTA [ e = tac2expr; el = LIST1 tac2expr LEVEL "0" -> - Loc.tag ~loc:!@loc @@ CTacApp (e, el) + CAst.make ~loc:!@loc @@ CTacApp (e, el) | e = SELF; ".("; qid = Prim.qualid; ")" -> - Loc.tag ~loc:!@loc @@ CTacPrj (e, RelId qid) + CAst.make ~loc:!@loc @@ CTacPrj (e, RelId qid) | e = SELF; ".("; qid = Prim.qualid; ")"; ":="; r = tac2expr LEVEL "5" -> - Loc.tag ~loc:!@loc @@ CTacSet (e, RelId qid, r) ] + CAst.make ~loc:!@loc @@ CTacSet (e, RelId qid, r) ] | "0" [ "("; a = SELF; ")" -> a | "("; a = SELF; ":"; t = tac2type; ")" -> - Loc.tag ~loc:!@loc @@ CTacCnv (a, t) + CAst.make ~loc:!@loc @@ CTacCnv (a, t) | "()" -> - Loc.tag ~loc:!@loc @@ CTacCst (AbsKn (Tuple 0)) + CAst.make ~loc:!@loc @@ CTacCst (AbsKn (Tuple 0)) | "("; ")" -> - Loc.tag ~loc:!@loc @@ CTacCst (AbsKn (Tuple 0)) + CAst.make ~loc:!@loc @@ CTacCst (AbsKn (Tuple 0)) | "["; a = LIST0 tac2expr LEVEL "5" SEP ";"; "]" -> Tac2quote.of_list ~loc:!@loc (fun x -> x) a | "{"; a = tac2rec_fieldexprs; "}" -> - Loc.tag ~loc:!@loc @@ CTacRec a + CAst.make ~loc:!@loc @@ CTacRec a | a = tactic_atom -> a ] ] ; @@ -204,14 +204,14 @@ GEXTEND Gram [ [ "'"; id = Prim.ident -> id ] ] ; tactic_atom: - [ [ n = Prim.integer -> Loc.tag ~loc:!@loc @@ CTacAtm (AtmInt n) - | s = Prim.string -> Loc.tag ~loc:!@loc @@ CTacAtm (AtmStr s) + [ [ n = Prim.integer -> CAst.make ~loc:!@loc @@ CTacAtm (AtmInt n) + | s = Prim.string -> CAst.make ~loc:!@loc @@ CTacAtm (AtmStr s) | id = Prim.qualid -> - if Tac2env.is_constructor (snd id) then - Loc.tag ~loc:!@loc @@ CTacCst (RelId id) + if Tac2env.is_constructor id.CAst.v then + CAst.make ~loc:!@loc @@ CTacCst (RelId id) else - Loc.tag ~loc:!@loc @@ CTacRef (RelId id) - | "@"; id = Prim.ident -> Tac2quote.of_ident (Loc.tag ~loc:!@loc id) + CAst.make ~loc:!@loc @@ CTacRef (RelId id) + | "@"; id = Prim.ident -> Tac2quote.of_ident (CAst.make ~loc:!@loc id) | "&"; id = lident -> Tac2quote.of_hyp ~loc:!@loc id | "'"; c = Constr.constr -> inj_open_constr !@loc c | IDENT "constr"; ":"; "("; c = Constr.lconstr; ")" -> Tac2quote.of_constr c @@ -227,7 +227,7 @@ GEXTEND Gram let (pat, fn) = binder in let te = match fn with | None -> te - | Some args -> Loc.tag ~loc:!@loc @@ CTacFun (args, te) + | Some args -> CAst.make ~loc:!@loc @@ CTacFun (args, te) in (pat, te) ] ] @@ -235,42 +235,42 @@ GEXTEND Gram let_binder: [ [ pats = LIST1 input_fun -> match pats with - | [(_, CPatVar _) as pat] -> (pat, None) - | ((_, CPatVar (Name id)) as pat) :: args -> (pat, Some args) + | [{CAst.v=CPatVar _} as pat] -> (pat, None) + | ({CAst.v=CPatVar (Name id)} as pat) :: args -> (pat, Some args) | [pat] -> (pat, None) | _ -> CErrors.user_err ~loc:!@loc (str "Invalid pattern") ] ] ; tac2type: [ "5" RIGHTA - [ t1 = tac2type; "->"; t2 = tac2type -> Loc.tag ~loc:!@loc @@ CTypArrow (t1, t2) ] + [ t1 = tac2type; "->"; t2 = tac2type -> CAst.make ~loc:!@loc @@ CTypArrow (t1, t2) ] | "2" [ t = tac2type; "*"; tl = LIST1 tac2type LEVEL "1" SEP "*" -> let tl = t :: tl in - Loc.tag ~loc:!@loc @@ CTypRef (AbsKn (Tuple (List.length tl)), tl) ] + CAst.make ~loc:!@loc @@ CTypRef (AbsKn (Tuple (List.length tl)), tl) ] | "1" LEFTA - [ t = SELF; qid = Prim.qualid -> Loc.tag ~loc:!@loc @@ CTypRef (RelId qid, [t]) ] + [ t = SELF; qid = Prim.qualid -> CAst.make ~loc:!@loc @@ CTypRef (RelId qid, [t]) ] | "0" [ "("; t = tac2type LEVEL "5"; ")" -> t - | id = typ_param -> Loc.tag ~loc:!@loc @@ CTypVar (Name id) - | "_" -> Loc.tag ~loc:!@loc @@ CTypVar Anonymous - | qid = Prim.qualid -> Loc.tag ~loc:!@loc @@ CTypRef (RelId qid, []) + | id = typ_param -> CAst.make ~loc:!@loc @@ CTypVar (Name id) + | "_" -> CAst.make ~loc:!@loc @@ CTypVar Anonymous + | qid = Prim.qualid -> CAst.make ~loc:!@loc @@ CTypRef (RelId qid, []) | "("; p = LIST1 tac2type LEVEL "5" SEP ","; ")"; qid = Prim.qualid -> - Loc.tag ~loc:!@loc @@ CTypRef (RelId qid, p) ] + CAst.make ~loc:!@loc @@ CTypRef (RelId qid, p) ] ]; locident: - [ [ id = Prim.ident -> Loc.tag ~loc:!@loc id ] ] + [ [ id = Prim.ident -> CAst.make ~loc:!@loc id ] ] ; binder: - [ [ "_" -> Loc.tag ~loc:!@loc Anonymous - | l = Prim.ident -> Loc.tag ~loc:!@loc (Name l) ] ] + [ [ "_" -> CAst.make ~loc:!@loc Anonymous + | l = Prim.ident -> CAst.make ~loc:!@loc (Name l) ] ] ; input_fun: [ [ b = tac2pat LEVEL "0" -> b ] ] ; tac2def_body: [ [ name = binder; it = LIST0 input_fun; ":="; e = tac2expr -> - let e = if List.is_empty it then e else Loc.tag ~loc:!@loc @@ CTacFun (it, e) in + let e = if List.is_empty it then e else CAst.make ~loc:!@loc @@ CTacFun (it, e) in (name, e) ] ] ; @@ -319,8 +319,8 @@ GEXTEND Gram ; tac2typ_prm: [ [ -> [] - | id = typ_param -> [Loc.tag ~loc:!@loc id] - | "("; ids = LIST1 [ id = typ_param -> Loc.tag ~loc:!@loc id ] SEP "," ;")" -> ids + | id = typ_param -> [CAst.make ~loc:!@loc id] + | "("; ids = LIST1 [ id = typ_param -> CAst.make ~loc:!@loc id ] SEP "," ;")" -> ids ] ] ; tac2typ_def: @@ -345,13 +345,13 @@ GEXTEND Gram ] ] ; syn_node: - [ [ "_" -> Loc.tag ~loc:!@loc None - | id = Prim.ident -> Loc.tag ~loc:!@loc (Some id) + [ [ "_" -> CAst.make ~loc:!@loc None + | id = Prim.ident -> CAst.make ~loc:!@loc (Some id) ] ] ; sexpr: - [ [ s = Prim.string -> SexprStr (Loc.tag ~loc:!@loc s) - | n = Prim.integer -> SexprInt (Loc.tag ~loc:!@loc n) + [ [ s = Prim.string -> SexprStr (CAst.make ~loc:!@loc s) + | n = Prim.integer -> SexprInt (CAst.make ~loc:!@loc n) | id = syn_node -> SexprRec (!@loc, id, []) | id = syn_node; "("; tok = LIST1 sexpr SEP "," ; ")" -> SexprRec (!@loc, id, tok) @@ -369,11 +369,11 @@ GEXTEND Gram ] ] ; lident: - [ [ id = Prim.ident -> Loc.tag ~loc:!@loc id ] ] + [ [ id = Prim.ident -> CAst.make ~loc:!@loc id ] ] ; globref: [ [ "&"; id = Prim.ident -> Libnames.Ident (Loc.tag ~loc:!@loc id) - | qid = Prim.qualid -> Libnames.Qualid qid + | qid = Prim.qualid -> Libnames.Qualid (Loc.tag ~loc:!@loc qid.CAst.v) ] ] ; END @@ -390,38 +390,38 @@ GEXTEND Gram q_destruction_arg q_reference q_with_bindings q_constr_matching q_goal_matching q_hintdb q_move_location q_pose q_assert; anti: - [ [ "$"; id = Prim.ident -> QAnti (Loc.tag ~loc:!@loc id) ] ] + [ [ "$"; id = Prim.ident -> QAnti (CAst.make ~loc:!@loc id) ] ] ; ident_or_anti: [ [ id = lident -> QExpr id - | "$"; id = Prim.ident -> QAnti (Loc.tag ~loc:!@loc id) + | "$"; id = Prim.ident -> QAnti (CAst.make ~loc:!@loc id) ] ] ; lident: - [ [ id = Prim.ident -> Loc.tag ~loc:!@loc id ] ] + [ [ id = Prim.ident -> CAst.make ~loc:!@loc id ] ] ; lnatural: - [ [ n = Prim.natural -> Loc.tag ~loc:!@loc n ] ] + [ [ n = Prim.natural -> CAst.make ~loc:!@loc n ] ] ; q_ident: [ [ id = ident_or_anti -> id ] ] ; qhyp: [ [ x = anti -> x - | n = lnatural -> QExpr (Loc.tag ~loc:!@loc @@ QAnonHyp n) - | id = lident -> QExpr (Loc.tag ~loc:!@loc @@ QNamedHyp id) + | n = lnatural -> QExpr (CAst.make ~loc:!@loc @@ QAnonHyp n) + | id = lident -> QExpr (CAst.make ~loc:!@loc @@ QNamedHyp id) ] ] ; simple_binding: [ [ "("; h = qhyp; ":="; c = Constr.lconstr; ")" -> - Loc.tag ~loc:!@loc (h, c) + CAst.make ~loc:!@loc (h, c) ] ] ; bindings: [ [ test_lpar_idnum_coloneq; bl = LIST1 simple_binding -> - Loc.tag ~loc:!@loc @@ QExplicitBindings bl + CAst.make ~loc:!@loc @@ QExplicitBindings bl | bl = LIST1 Constr.constr -> - Loc.tag ~loc:!@loc @@ QImplicitBindings bl + CAst.make ~loc:!@loc @@ QImplicitBindings bl ] ] ; q_bindings: @@ -431,53 +431,53 @@ GEXTEND Gram [ [ bl = with_bindings -> bl ] ] ; intropatterns: - [ [ l = LIST0 nonsimple_intropattern -> Loc.tag ~loc:!@loc l ]] + [ [ l = LIST0 nonsimple_intropattern -> CAst.make ~loc:!@loc l ]] ; (* ne_intropatterns: *) (* [ [ l = LIST1 nonsimple_intropattern -> l ]] *) (* ; *) or_and_intropattern: - [ [ "["; tc = LIST1 intropatterns SEP "|"; "]" -> Loc.tag ~loc:!@loc @@ QIntroOrPattern tc - | "()" -> Loc.tag ~loc:!@loc @@ QIntroAndPattern (Loc.tag ~loc:!@loc []) - | "("; si = simple_intropattern; ")" -> Loc.tag ~loc:!@loc @@ QIntroAndPattern (Loc.tag ~loc:!@loc [si]) + [ [ "["; tc = LIST1 intropatterns SEP "|"; "]" -> CAst.make ~loc:!@loc @@ QIntroOrPattern tc + | "()" -> CAst.make ~loc:!@loc @@ QIntroAndPattern (CAst.make ~loc:!@loc []) + | "("; si = simple_intropattern; ")" -> CAst.make ~loc:!@loc @@ QIntroAndPattern (CAst.make ~loc:!@loc [si]) | "("; si = simple_intropattern; ","; tc = LIST1 simple_intropattern SEP "," ; ")" -> - Loc.tag ~loc:!@loc @@ QIntroAndPattern (Loc.tag ~loc:!@loc (si::tc)) + CAst.make ~loc:!@loc @@ QIntroAndPattern (CAst.make ~loc:!@loc (si::tc)) | "("; si = simple_intropattern; "&"; tc = LIST1 simple_intropattern SEP "&" ; ")" -> (* (A & B & C) is translated into (A,(B,C)) *) let rec pairify = function - | ([]|[_]|[_;_]) as l -> Loc.tag ~loc:!@loc l + | ([]|[_]|[_;_]) as l -> CAst.make ~loc:!@loc l | t::q -> let q = - Loc.tag ~loc:!@loc @@ - QIntroAction (Loc.tag ~loc:!@loc @@ - QIntroOrAndPattern (Loc.tag ~loc:!@loc @@ + CAst.make ~loc:!@loc @@ + QIntroAction (CAst.make ~loc:!@loc @@ + QIntroOrAndPattern (CAst.make ~loc:!@loc @@ QIntroAndPattern (pairify q))) in - Loc.tag ~loc:!@loc [t; q] - in Loc.tag ~loc:!@loc @@ QIntroAndPattern (pairify (si::tc)) ] ] + CAst.make ~loc:!@loc [t; q] + in CAst.make ~loc:!@loc @@ QIntroAndPattern (pairify (si::tc)) ] ] ; equality_intropattern: - [ [ "->" -> Loc.tag ~loc:!@loc @@ QIntroRewrite true - | "<-" -> Loc.tag ~loc:!@loc @@ QIntroRewrite false - | "[="; tc = intropatterns; "]" -> Loc.tag ~loc:!@loc @@ QIntroInjection tc ] ] + [ [ "->" -> CAst.make ~loc:!@loc @@ QIntroRewrite true + | "<-" -> CAst.make ~loc:!@loc @@ QIntroRewrite false + | "[="; tc = intropatterns; "]" -> CAst.make ~loc:!@loc @@ QIntroInjection tc ] ] ; naming_intropattern: [ [ LEFTQMARK; id = lident -> - Loc.tag ~loc:!@loc @@ QIntroFresh (QExpr id) + CAst.make ~loc:!@loc @@ QIntroFresh (QExpr id) | "?$"; id = lident -> - Loc.tag ~loc:!@loc @@ QIntroFresh (QAnti id) + CAst.make ~loc:!@loc @@ QIntroFresh (QAnti id) | "?" -> - Loc.tag ~loc:!@loc @@ QIntroAnonymous + CAst.make ~loc:!@loc @@ QIntroAnonymous | id = ident_or_anti -> - Loc.tag ~loc:!@loc @@ QIntroIdentifier id + CAst.make ~loc:!@loc @@ QIntroIdentifier id ] ] ; nonsimple_intropattern: [ [ l = simple_intropattern -> l - | "*" -> Loc.tag ~loc:!@loc @@ QIntroForthcoming true - | "**" -> Loc.tag ~loc:!@loc @@ QIntroForthcoming false ]] + | "*" -> CAst.make ~loc:!@loc @@ QIntroForthcoming true + | "**" -> CAst.make ~loc:!@loc @@ QIntroForthcoming false ]] ; simple_intropattern: [ [ pat = simple_intropattern_closed -> @@ -488,13 +488,13 @@ GEXTEND Gram ; simple_intropattern_closed: [ [ pat = or_and_intropattern -> - Loc.tag ~loc:!@loc @@ QIntroAction (Loc.tag ~loc:!@loc @@ QIntroOrAndPattern pat) + CAst.make ~loc:!@loc @@ QIntroAction (CAst.make ~loc:!@loc @@ QIntroOrAndPattern pat) | pat = equality_intropattern -> - Loc.tag ~loc:!@loc @@ QIntroAction pat + CAst.make ~loc:!@loc @@ QIntroAction pat | "_" -> - Loc.tag ~loc:!@loc @@ QIntroAction (Loc.tag ~loc:!@loc @@ QIntroWildcard) + CAst.make ~loc:!@loc @@ QIntroAction (CAst.make ~loc:!@loc @@ QIntroWildcard) | pat = naming_intropattern -> - Loc.tag ~loc:!@loc @@ QIntroNaming pat + CAst.make ~loc:!@loc @@ QIntroNaming pat ] ] ; q_intropatterns: @@ -505,7 +505,7 @@ GEXTEND Gram ; nat_or_anti: [ [ n = lnatural -> QExpr n - | "$"; id = Prim.ident -> QAnti (Loc.tag ~loc:!@loc id) + | "$"; id = Prim.ident -> QAnti (CAst.make ~loc:!@loc id) ] ] ; eqn_ipat: @@ -514,15 +514,15 @@ GEXTEND Gram ] ] ; with_bindings: - [ [ "with"; bl = bindings -> bl | -> Loc.tag ~loc:!@loc @@ QNoBindings ] ] + [ [ "with"; bl = bindings -> bl | -> CAst.make ~loc:!@loc @@ QNoBindings ] ] ; constr_with_bindings: - [ [ c = Constr.constr; l = with_bindings -> Loc.tag ~loc:!@loc @@ (c, l) ] ] + [ [ c = Constr.constr; l = with_bindings -> CAst.make ~loc:!@loc @@ (c, l) ] ] ; destruction_arg: - [ [ n = lnatural -> Loc.tag ~loc:!@loc @@ QElimOnAnonHyp n - | id = lident -> Loc.tag ~loc:!@loc @@ QElimOnIdent id - | c = constr_with_bindings -> Loc.tag ~loc:!@loc @@ QElimOnConstr c + [ [ n = lnatural -> CAst.make ~loc:!@loc @@ QElimOnAnonHyp n + | id = lident -> CAst.make ~loc:!@loc @@ QElimOnIdent id + | c = constr_with_bindings -> CAst.make ~loc:!@loc @@ QElimOnConstr c ] ] ; q_destruction_arg: @@ -534,13 +534,13 @@ GEXTEND Gram ] ] ; occs_nums: - [ [ nl = LIST1 nat_or_anti -> Loc.tag ~loc:!@loc @@ QOnlyOccurrences nl + [ [ nl = LIST1 nat_or_anti -> CAst.make ~loc:!@loc @@ QOnlyOccurrences nl | "-"; n = nat_or_anti; nl = LIST0 nat_or_anti -> - Loc.tag ~loc:!@loc @@ QAllOccurrencesBut (n::nl) + CAst.make ~loc:!@loc @@ QAllOccurrencesBut (n::nl) ] ] ; occs: - [ [ "at"; occs = occs_nums -> occs | -> Loc.tag ~loc:!@loc QAllOccurrences ] ] + [ [ "at"; occs = occs_nums -> occs | -> CAst.make ~loc:!@loc QAllOccurrences ] ] ; hypident: [ [ id = ident_or_anti -> @@ -562,13 +562,13 @@ GEXTEND Gram | hl = LIST0 hypident_occ SEP ","; "|-"; occs = concl_occ -> { q_onhyps = Some hl; q_concl_occs = occs } | hl = LIST0 hypident_occ SEP "," -> - { q_onhyps = Some hl; q_concl_occs = Loc.tag ~loc:!@loc QNoOccurrences } + { q_onhyps = Some hl; q_concl_occs = CAst.make ~loc:!@loc QNoOccurrences } ] ] ; clause: - [ [ "in"; cl = in_clause -> Loc.tag ~loc:!@loc @@ cl + [ [ "in"; cl = in_clause -> CAst.make ~loc:!@loc @@ cl | "at"; occs = occs_nums -> - Loc.tag ~loc:!@loc @@ { q_onhyps = Some []; q_concl_occs = occs } + CAst.make ~loc:!@loc @@ { q_onhyps = Some []; q_concl_occs = occs } ] ] ; q_clause: @@ -576,13 +576,13 @@ GEXTEND Gram ; concl_occ: [ [ "*"; occs = occs -> occs - | -> Loc.tag ~loc:!@loc QNoOccurrences + | -> CAst.make ~loc:!@loc QNoOccurrences ] ] ; induction_clause: [ [ c = destruction_arg; pat = as_or_and_ipat; eq = eqn_ipat; cl = OPT clause -> - Loc.tag ~loc:!@loc @@ { + CAst.make ~loc:!@loc @@ { indcl_arg = c; indcl_eqn = eq; indcl_as = pat; @@ -595,38 +595,38 @@ GEXTEND Gram ; conversion: [ [ c = Constr.constr -> - Loc.tag ~loc:!@loc @@ QConvert c + CAst.make ~loc:!@loc @@ QConvert c | c1 = Constr.constr; "with"; c2 = Constr.constr -> - Loc.tag ~loc:!@loc @@ QConvertWith (c1, c2) + CAst.make ~loc:!@loc @@ QConvertWith (c1, c2) ] ] ; q_conversion: [ [ c = conversion -> c ] ] ; orient: - [ [ "->" -> Loc.tag ~loc:!@loc (Some true) - | "<-" -> Loc.tag ~loc:!@loc (Some false) - | -> Loc.tag ~loc:!@loc None + [ [ "->" -> CAst.make ~loc:!@loc (Some true) + | "<-" -> CAst.make ~loc:!@loc (Some false) + | -> CAst.make ~loc:!@loc None ]] ; rewriter: [ [ "!"; c = constr_with_bindings -> - (Loc.tag ~loc:!@loc @@ QRepeatPlus,c) + (CAst.make ~loc:!@loc @@ QRepeatPlus,c) | ["?"| LEFTQMARK]; c = constr_with_bindings -> - (Loc.tag ~loc:!@loc @@ QRepeatStar,c) + (CAst.make ~loc:!@loc @@ QRepeatStar,c) | n = lnatural; "!"; c = constr_with_bindings -> - (Loc.tag ~loc:!@loc @@ QPrecisely n,c) + (CAst.make ~loc:!@loc @@ QPrecisely n,c) | n = lnatural; ["?" | LEFTQMARK]; c = constr_with_bindings -> - (Loc.tag ~loc:!@loc @@ QUpTo n,c) + (CAst.make ~loc:!@loc @@ QUpTo n,c) | n = lnatural; c = constr_with_bindings -> - (Loc.tag ~loc:!@loc @@ QPrecisely n,c) + (CAst.make ~loc:!@loc @@ QPrecisely n,c) | c = constr_with_bindings -> - (Loc.tag ~loc:!@loc @@ QPrecisely (Loc.tag 1), c) + (CAst.make ~loc:!@loc @@ QPrecisely (CAst.make 1), c) ] ] ; oriented_rewriter: [ [ b = orient; (m, c) = rewriter -> - Loc.tag ~loc:!@loc @@ { + CAst.make ~loc:!@loc @@ { rew_orient = b; rew_repeat = m; rew_equatn = c; @@ -651,52 +651,52 @@ GEXTEND Gram ] ] ; q_dispatch: - [ [ d = tactic_then_gen -> Loc.tag ~loc:!@loc d ] ] + [ [ d = tactic_then_gen -> CAst.make ~loc:!@loc d ] ] ; q_occurrences: [ [ occs = occs -> occs ] ] ; red_flag: - [ [ IDENT "beta" -> Loc.tag ~loc:!@loc @@ QBeta - | IDENT "iota" -> Loc.tag ~loc:!@loc @@ QIota - | IDENT "match" -> Loc.tag ~loc:!@loc @@ QMatch - | IDENT "fix" -> Loc.tag ~loc:!@loc @@ QFix - | IDENT "cofix" -> Loc.tag ~loc:!@loc @@ QCofix - | IDENT "zeta" -> Loc.tag ~loc:!@loc @@ QZeta + [ [ IDENT "beta" -> CAst.make ~loc:!@loc @@ QBeta + | IDENT "iota" -> CAst.make ~loc:!@loc @@ QIota + | IDENT "match" -> CAst.make ~loc:!@loc @@ QMatch + | IDENT "fix" -> CAst.make ~loc:!@loc @@ QFix + | IDENT "cofix" -> CAst.make ~loc:!@loc @@ QCofix + | IDENT "zeta" -> CAst.make ~loc:!@loc @@ QZeta | IDENT "delta"; d = delta_flag -> d ] ] ; refglobal: [ [ "&"; id = Prim.ident -> QExpr (Libnames.Ident (Loc.tag ~loc:!@loc id)) - | qid = Prim.qualid -> QExpr (Libnames.Qualid qid) - | "$"; id = Prim.ident -> QAnti (Loc.tag ~loc:!@loc id) + | qid = Prim.qualid -> QExpr (Libnames.Qualid Loc.(tag ~loc:!@loc qid.CAst.v)) + | "$"; id = Prim.ident -> QAnti (CAst.make ~loc:!@loc id) ] ] ; q_reference: [ [ r = refglobal -> r ] ] ; refglobals: - [ [ gl = LIST1 refglobal -> Loc.tag ~loc:!@loc gl ] ] + [ [ gl = LIST1 refglobal -> CAst.make ~loc:!@loc gl ] ] ; delta_flag: - [ [ "-"; "["; idl = refglobals; "]" -> Loc.tag ~loc:!@loc @@ QDeltaBut idl - | "["; idl = refglobals; "]" -> Loc.tag ~loc:!@loc @@ QConst idl - | -> Loc.tag ~loc:!@loc @@ QDeltaBut (Loc.tag ~loc:!@loc []) + [ [ "-"; "["; idl = refglobals; "]" -> CAst.make ~loc:!@loc @@ QDeltaBut idl + | "["; idl = refglobals; "]" -> CAst.make ~loc:!@loc @@ QConst idl + | -> CAst.make ~loc:!@loc @@ QDeltaBut (CAst.make ~loc:!@loc []) ] ] ; strategy_flag: - [ [ s = LIST1 red_flag -> Loc.tag ~loc:!@loc s + [ [ s = LIST1 red_flag -> CAst.make ~loc:!@loc s | d = delta_flag -> - Loc.tag ~loc:!@loc - [Loc.tag ~loc:!@loc QBeta; Loc.tag ~loc:!@loc QIota; Loc.tag ~loc:!@loc QZeta; d] + CAst.make ~loc:!@loc + [CAst.make ~loc:!@loc QBeta; CAst.make ~loc:!@loc QIota; CAst.make ~loc:!@loc QZeta; d] ] ] ; q_strategy_flag: [ [ flag = strategy_flag -> flag ] ] ; hintdb: - [ [ "*" -> Loc.tag ~loc:!@loc @@ QHintAll - | l = LIST1 ident_or_anti -> Loc.tag ~loc:!@loc @@ QHintDbs l + [ [ "*" -> CAst.make ~loc:!@loc @@ QHintAll + | l = LIST1 ident_or_anti -> CAst.make ~loc:!@loc @@ QHintDbs l ] ] ; q_hintdb: @@ -704,17 +704,17 @@ GEXTEND Gram ; match_pattern: [ [ IDENT "context"; id = OPT Prim.ident; - "["; pat = Constr.lconstr_pattern; "]" -> Loc.tag ~loc:!@loc @@ QConstrMatchContext (id, pat) - | pat = Constr.lconstr_pattern -> Loc.tag ~loc:!@loc @@ QConstrMatchPattern pat ] ] + "["; pat = Constr.lconstr_pattern; "]" -> CAst.make ~loc:!@loc @@ QConstrMatchContext (id, pat) + | pat = Constr.lconstr_pattern -> CAst.make ~loc:!@loc @@ QConstrMatchPattern pat ] ] ; match_rule: [ [ mp = match_pattern; "=>"; tac = tac2expr -> - Loc.tag ~loc:!@loc @@ (mp, tac) + CAst.make ~loc:!@loc @@ (mp, tac) ] ] ; match_list: - [ [ mrl = LIST1 match_rule SEP "|" -> Loc.tag ~loc:!@loc @@ mrl - | "|"; mrl = LIST1 match_rule SEP "|" -> Loc.tag ~loc:!@loc @@ mrl ] ] + [ [ mrl = LIST1 match_rule SEP "|" -> CAst.make ~loc:!@loc @@ mrl + | "|"; mrl = LIST1 match_rule SEP "|" -> CAst.make ~loc:!@loc @@ mrl ] ] ; q_constr_matching: [ [ m = match_list -> m ] ] @@ -724,7 +724,7 @@ GEXTEND Gram ; gmatch_pattern: [ [ "["; hl = LIST0 gmatch_hyp_pattern SEP ","; "|-"; p = match_pattern; "]" -> - Loc.tag ~loc:!@loc @@ { + CAst.make ~loc:!@loc @@ { q_goal_match_concl = p; q_goal_match_hyps = hl; } @@ -732,21 +732,21 @@ GEXTEND Gram ; gmatch_rule: [ [ mp = gmatch_pattern; "=>"; tac = tac2expr -> - Loc.tag ~loc:!@loc @@ (mp, tac) + CAst.make ~loc:!@loc @@ (mp, tac) ] ] ; gmatch_list: - [ [ mrl = LIST1 gmatch_rule SEP "|" -> Loc.tag ~loc:!@loc @@ mrl - | "|"; mrl = LIST1 gmatch_rule SEP "|" -> Loc.tag ~loc:!@loc @@ mrl ] ] + [ [ mrl = LIST1 gmatch_rule SEP "|" -> CAst.make ~loc:!@loc @@ mrl + | "|"; mrl = LIST1 gmatch_rule SEP "|" -> CAst.make ~loc:!@loc @@ mrl ] ] ; q_goal_matching: [ [ m = gmatch_list -> m ] ] ; move_location: - [ [ "at"; IDENT "top" -> Loc.tag ~loc:!@loc @@ QMoveFirst - | "at"; IDENT "bottom" -> Loc.tag ~loc:!@loc @@ QMoveLast - | IDENT "after"; id = ident_or_anti -> Loc.tag ~loc:!@loc @@ QMoveAfter id - | IDENT "before"; id = ident_or_anti -> Loc.tag ~loc:!@loc @@ QMoveBefore id + [ [ "at"; IDENT "top" -> CAst.make ~loc:!@loc @@ QMoveFirst + | "at"; IDENT "bottom" -> CAst.make ~loc:!@loc @@ QMoveLast + | IDENT "after"; id = ident_or_anti -> CAst.make ~loc:!@loc @@ QMoveAfter id + | IDENT "before"; id = ident_or_anti -> CAst.make ~loc:!@loc @@ QMoveBefore id ] ] ; q_move_location: @@ -759,8 +759,8 @@ GEXTEND Gram ; pose: [ [ test_lpar_id_coloneq; "("; id = ident_or_anti; ":="; c = Constr.lconstr; ")" -> - Loc.tag ~loc:!@loc (Some id, c) - | c = Constr.constr; na = as_name -> Loc.tag ~loc:!@loc (na, c) + CAst.make ~loc:!@loc (Some id, c) + | c = Constr.constr; na = as_name -> CAst.make ~loc:!@loc (na, c) ] ] ; q_pose: @@ -778,13 +778,13 @@ GEXTEND Gram ; assertion: [ [ test_lpar_id_coloneq; "("; id = ident_or_anti; ":="; c = Constr.lconstr; ")" -> - Loc.tag ~loc:!@loc (QAssertValue (id, c)) + CAst.make ~loc:!@loc (QAssertValue (id, c)) | test_lpar_id_colon; "("; id = ident_or_anti; ":"; c = Constr.lconstr; ")"; tac = by_tactic -> let loc = !@loc in - let ipat = Loc.tag ~loc @@ QIntroNaming (Loc.tag ~loc @@ QIntroIdentifier id) in - Loc.tag ~loc (QAssertType (Some ipat, c, tac)) + let ipat = CAst.make ~loc @@ QIntroNaming (CAst.make ~loc @@ QIntroIdentifier id) in + CAst.make ~loc (QAssertType (Some ipat, c, tac)) | c = Constr.constr; ipat = as_ipat; tac = by_tactic -> - Loc.tag ~loc:!@loc (QAssertType (ipat, c, tac)) + CAst.make ~loc:!@loc (QAssertType (ipat, c, tac)) ] ] ; q_assert: @@ -801,7 +801,7 @@ GEXTEND Gram let arg = Genarg.in_gen (Genarg.rawwit Tac2env.wit_ltac2) tac in CAst.make ~loc:!@loc (CHole (None, IntroAnonymous, Some arg)) | test_ampersand_ident; "&"; id = Prim.ident -> - let tac = Tac2quote.of_exact_hyp ~loc:!@loc (Loc.tag ~loc:!@loc id) in + let tac = Tac2quote.of_exact_hyp ~loc:!@loc (CAst.make ~loc:!@loc id) in let arg = Genarg.in_gen (Genarg.rawwit Tac2env.wit_ltac2) tac in CAst.make ~loc:!@loc (CHole (None, IntroAnonymous, Some arg)) | test_dollar_ident; "$"; id = Prim.ident -> |
