aboutsummaryrefslogtreecommitdiff
path: root/printing/ppconstr.ml
diff options
context:
space:
mode:
authorRegis-Gianas2014-11-04 14:46:47 +0100
committerRegis-Gianas2014-11-04 22:51:36 +0100
commitdb9b17d55f539fcfda799a9fe15caa2530cc727f (patch)
tree112ce79b5bff93308caff927f138fd2768dde5be /printing/ppconstr.ml
parent7b3f2d2783f74a38b4fe40d2dc5f58b8d5bae0f1 (diff)
printing/Ppannotation: Introduce a new annotation for keywords.
printing/{Ppconstr, Ppvernac}: Use it.
Diffstat (limited to 'printing/ppconstr.ml')
-rw-r--r--printing/ppconstr.ml201
1 files changed, 125 insertions, 76 deletions
diff --git a/printing/ppconstr.ml b/printing/ppconstr.ml
index 99ca023a8e..ad95d99693 100644
--- a/printing/ppconstr.ml
+++ b/printing/ppconstr.ml
@@ -24,12 +24,14 @@ open Genredexpr
(*i*)
module Make (Taggers : sig
+ val tag_keyword : std_ppcmds -> std_ppcmds
val tag_constr_expr : constr_expr -> std_ppcmds -> std_ppcmds
val tag_unparsing : unparsing -> std_ppcmds -> std_ppcmds
end) = struct
open Taggers
+ let keyword s = tag_keyword (str s)
let sep_v = fun _ -> str"," ++ spc()
let pr_tight_coma () = str "," ++ cut ()
@@ -141,10 +143,10 @@ end) = struct
let pr_univ_annot pr x = str "@{" ++ pr x ++ str "}"
let pr_glob_sort = function
- | GProp -> str "Prop"
- | GSet -> str "Set"
- | GType [] -> str "Type"
- | GType u -> hov 0 (str "Type" ++ pr_univ_annot pr_univ u)
+ | GProp -> keyword "Prop"
+ | GSet -> keyword "Set"
+ | GType [] -> keyword "Type"
+ | GType u -> hov 0 (keyword "Type" ++ pr_univ_annot pr_univ u)
let pr_id = pr_id
let pr_name = pr_name
@@ -152,12 +154,14 @@ end) = struct
let pr_patvar = pr_id
let pr_glob_sort_instance = function
- | GProp -> str "Prop"
- | GSet -> str "Set"
+ | GProp ->
+ tag_keyword (str "Prop")
+ | GSet ->
+ tag_keyword (str "Set")
| GType u ->
(match u with
| Some u -> str u
- | None -> str "Type")
+ | None -> tag_keyword (str "Type"))
let pr_universe_instance l =
pr_opt_no_spc (pr_univ_annot (prlist_with_sep spc pr_glob_sort_instance)) l
@@ -184,11 +188,12 @@ end) = struct
let pr_lident (loc,id) =
if not (Loc.is_ghost loc) then
let (b,_) = Loc.unloc loc in
- pr_located pr_id (Loc.make_loc (b,b+String.length(Id.to_string id)),id)
- else pr_id id
+ pr_located pr_id (Loc.make_loc (b,b + String.length (Id.to_string id)), id)
+ else
+ pr_id id
let pr_lname = function
- (loc,Name id) -> pr_lident (loc,id)
+ | (loc,Name id) -> pr_lident (loc,id)
| lna -> pr_located pr_name lna
let pr_or_var pr = function
@@ -200,12 +205,13 @@ end) = struct
| String s -> qs s
let pr_evar pr id l =
- hov 0 (str "?" ++ pr_id id ++
- (match l with
- | [] -> mt()
- | l ->
- let f (id,c) = pr_id id ++ str ":=" ++ pr ltop c in
- str"@{" ++ hov 0 (prlist_with_sep pr_semicolon f (List.rev l)) ++ str"}"))
+ hov 0 (
+ str "?" ++ pr_id id ++
+ (match l with
+ | [] -> mt()
+ | l ->
+ let f (id,c) = pr_id id ++ str ":=" ++ pr ltop c in
+ str"@{" ++ hov 0 (prlist_with_sep pr_semicolon f (List.rev l)) ++ str"}"))
let las = lapp
let lpator = 100
@@ -215,30 +221,48 @@ end) = struct
let (strm,prec) = match p with
| CPatRecord (_, l) ->
let pp (c, p) =
- pr_reference c ++ spc() ++ str ":=" ++ pr_patt spc (lpatrec, Any) p in
+ pr_reference c ++ spc() ++ str ":=" ++ pr_patt spc (lpatrec, Any) p
+ in
str "{| " ++ prlist_with_sep pr_semicolon pp l ++ str " |}", lpatrec
- | CPatAlias (_,p,id) ->
+
+ | CPatAlias (_, p, id) ->
pr_patt mt (las,E) p ++ str " as " ++ pr_id id, las
- | CPatCstr (_,c,[],[]) -> pr_reference c, latom
- | CPatCstr (_,c,[],args) ->
+
+ | CPatCstr (_,c, [], []) ->
+ pr_reference c, latom
+
+ | CPatCstr (_, c, [], args) ->
pr_reference c ++ prlist (pr_patt spc (lapp,L)) args, lapp
- | CPatCstr (_,c,args,[]) ->
+
+ | CPatCstr (_, c, args, []) ->
str "@" ++ pr_reference c ++ prlist (pr_patt spc (lapp,L)) args, lapp
- | CPatCstr (_,c,expl_args,extra_args) ->
+
+ | CPatCstr (_, c, expl_args, extra_args) ->
surround (str "@" ++ pr_reference c ++ prlist (pr_patt spc (lapp,L)) expl_args)
++ prlist (pr_patt spc (lapp,L)) extra_args, lapp
- | CPatAtom (_,None) -> str "_", latom
- | CPatAtom (_,Some r) -> pr_reference r, latom
+
+ | CPatAtom (_, None) ->
+ str "_", latom
+
+ | CPatAtom (_,Some r) ->
+ pr_reference r, latom
+
| CPatOr (_,pl) ->
hov 0 (prlist_with_sep pr_bar (pr_patt spc (lpator,L)) pl), lpator
+
| CPatNotation (_,"( _ )",([p],[]),[]) ->
pr_patt (fun()->str"(") (max_int,E) p ++ str")", latom
+
| CPatNotation (_,s,(l,ll),args) ->
let strm_not, l_not = pr_notation (pr_patt mt) (fun _ _ _ -> mt()) s (l,ll,[]) in
(if List.is_empty args||prec_less l_not (lapp,L) then strm_not else surround strm_not)
++ prlist (pr_patt spc (lapp,L)) args, if not (List.is_empty args) then lapp else l_not
- | CPatPrim (_,p) -> pr_prim_token p, latom
- | CPatDelimiters (_,k,p) -> pr_delimiters k (pr_patt mt lsimplepatt p), 1
+
+ | CPatPrim (_,p) ->
+ pr_prim_token p, latom
+
+ | CPatDelimiters (_,k,p) ->
+ pr_delimiters k (pr_patt mt lsimplepatt p), 1
in
let loc = cases_pattern_expr_loc p in
pr_with_comments loc
@@ -453,17 +477,18 @@ end) = struct
pr (lapp,L) a ++
prlist (fun a -> spc () ++ pr_expl_args pr a) l)
- let pr_forall () = str"forall" ++ spc ()
+ let pr_forall () = keyword "forall" ++ spc ()
- let pr_fun () = str"fun" ++ spc ()
-
- let pr_fun_sep = str " =>"
+ let pr_fun () = keyword "fun" ++ spc ()
+ let pr_fun_sep = spc () ++ str "=>"
let pr_dangling_with_for sep pr inherited a =
match a with
- | (CFix (_,_,[_])|CCoFix(_,_,[_])) -> pr sep (latom,E) a
- | _ -> pr sep inherited a
+ | (CFix (_,_,[_])|CCoFix(_,_,[_])) ->
+ pr sep (latom,E) a
+ | _ ->
+ pr sep inherited a
let pr pr sep inherited a =
let return (cmds, prec) = (tag_constr_expr a cmds, prec) in
@@ -472,14 +497,14 @@ end) = struct
return (pr_cref r us, latom)
| CFix (_,id,fix) ->
return (
- hov 0 (str"fix " ++
+ hov 0 (keyword "fix" ++ spc () ++
pr_recursive
(pr_fixdecl (pr mt) (pr_dangling_with_for mt pr)) (snd id) fix),
lfix
)
| CCoFix (_,id,cofix) ->
return (
- hov 0 (str "cofix " ++
+ hov 0 (keyword "cofix" ++ spc () ++
pr_recursive
(pr_cofixdecl (pr mt) (pr_dangling_with_for mt pr)) (snd id) cofix),
lfix
@@ -506,15 +531,18 @@ end) = struct
when Id.equal x x' ->
return (
hv 0 (
- hov 2 (str "let " ++ pr mt ltop fx ++ str " in") ++
+ hov 2 (keyword "let" ++ spc () ++ pr mt ltop fx
+ ++ spc ()
+ ++ keyword "in") ++
pr spc ltop b),
lletin
)
| CLetIn (_,x,a,b) ->
return (
hv 0 (
- hov 2 (str "let " ++ pr_lname x ++ str " :=" ++
- pr spc ltop a ++ str " in") ++
+ hov 2 (keyword "let" ++ spc () ++ pr_lname x ++ str " :="
+ ++ pr spc ltop a ++ spc ()
+ ++ keyword "in") ++
pr spc ltop b),
lletin
)
@@ -552,8 +580,11 @@ end) = struct
| CRecord (_,w,l) ->
let beg =
match w with
- | None -> spc ()
- | Some t -> spc () ++ pr spc ltop t ++ spc () ++ str"with" ++ spc ()
+ | None ->
+ spc ()
+ | Some t ->
+ spc () ++ pr spc ltop t ++ spc ()
+ ++ keyword "with" ++ spc ()
in
return (
hv 0 (str"{|" ++ beg ++
@@ -565,35 +596,37 @@ end) = struct
| CCases (_,LetPatternStyle,rtntypopt,[c,asin],[(_,[(loc,[p])],b)]) ->
return (
hv 0 (
- str "let '" ++
+ keyword "let" ++ spc () ++ str"'" ++
hov 0 (pr_patt ltop p ++
pr_asin (pr_dangling_with_for mt pr) asin ++
str " :=" ++ pr spc ltop c ++
pr_case_type (pr_dangling_with_for mt pr) rtntypopt ++
- str " in" ++ pr spc ltop b)),
+ spc () ++ keyword "in" ++ pr spc ltop b)),
lletpattern
)
| CCases(_,_,rtntypopt,c,eqns) ->
return (
v 0
- (hv 0 (str "match" ++ brk (1,2) ++
+ (hv 0 (keyword "match" ++ brk (1,2) ++
hov 0 (
prlist_with_sep sep_v
(pr_case_item (pr_dangling_with_for mt pr)) c
++ pr_case_type (pr_dangling_with_for mt pr) rtntypopt) ++
- spc () ++ str "with") ++
- prlist (pr_eqn (pr mt)) eqns ++ spc() ++ str "end"),
+ spc () ++ keyword "with") ++
+ prlist (pr_eqn (pr mt)) eqns ++ spc()
+ ++ keyword "end"),
latom
)
| CLetTuple (_,nal,(na,po),c,b) ->
return (
hv 0 (
- str "let " ++
+ keyword "let" ++ spc () ++
hov 0 (str "(" ++
prlist_with_sep sep_v pr_lname nal ++
str ")" ++
pr_simple_return_type (pr mt) na po ++ str " :=" ++
- pr spc ltop c ++ str " in") ++
+ pr spc ltop c ++ spc ()
+ ++ keyword "in") ++
pr spc ltop b),
lletin
)
@@ -602,10 +635,12 @@ end) = struct
parsing est lui plus tolérant) *)
return (
hv 0 (
- hov 1 (str "if " ++ pr mt ltop c ++ pr_simple_return_type (pr mt) na po) ++
+ hov 1 (keyword "if" ++ spc () ++ pr mt ltop c
+ ++ pr_simple_return_type (pr mt) na po) ++
spc () ++
- hov 0 (str "then" ++ pr (fun () -> brk (1,1)) ltop b1) ++ spc () ++
- hov 0 (str "else" ++ pr (fun () -> brk (1,1)) ltop b2)),
+ hov 0 (keyword "then"
+ ++ pr (fun () -> brk (1,1)) ltop b1) ++ spc () ++
+ hov 0 (keyword "else" ++ pr (fun () -> brk (1,1)) ltop b2)),
lif
)
@@ -655,7 +690,7 @@ end) = struct
type precedence = Ppextend.precedence * Ppextend.parenRelation
let modular_constr_pr = pr
- let rec fix rf x =rf (fix rf) x
+ let rec fix rf x = rf (fix rf) x
let pr = fix modular_constr_pr mt
let transf env c =
@@ -692,13 +727,15 @@ end) = struct
let pr_with_occurrences pr (occs,c) =
match occs with
- | AllOccurrences -> pr c
- | NoOccurrences -> failwith "pr_with_occurrences: no occurrences"
+ | AllOccurrences ->
+ pr c
+ | NoOccurrences ->
+ failwith "pr_with_occurrences: no occurrences"
| OnlyOccurrences nl ->
- hov 1 (pr c ++ spc() ++ str"at " ++
+ hov 1 (pr c ++ spc () ++ keyword "at" ++ spc () ++
hov 0 (prlist_with_sep spc (pr_or_var int) nl))
| AllOccurrencesBut nl ->
- hov 1 (pr c ++ spc() ++ str"at - " ++
+ hov 1 (pr c ++ spc () ++ keyword "at" ++ str" - " ++
hov 0 (prlist_with_sep spc (pr_or_var int) nl))
let pr_red_flag pr r =
@@ -715,46 +752,54 @@ end) = struct
let pr_metaid id = str"?" ++ pr_id id
let pr_red_expr (pr_constr,pr_lconstr,pr_ref,pr_pattern) = function
- | Red false -> str "red"
- | Hnf -> str "hnf"
- | Simpl o -> str "simpl" ++ pr_opt (pr_with_occurrences pr_pattern) o
+ | Red false -> keyword "red"
+ | Hnf -> keyword "hnf"
+ | Simpl o -> keyword "simpl" ++ pr_opt (pr_with_occurrences pr_pattern) o
| Cbv f ->
if f.rBeta && f.rIota && f.rZeta && f.rDelta && List.is_empty f.rConst then
- str "compute"
+ keyword "compute"
else
- hov 1 (str "cbv" ++ pr_red_flag pr_ref f)
+ hov 1 (keyword "cbv" ++ pr_red_flag pr_ref f)
| Lazy f ->
- hov 1 (str "lazy" ++ pr_red_flag pr_ref f)
+ hov 1 (keyword "lazy" ++ pr_red_flag pr_ref f)
| Cbn f ->
- hov 1 (str "cbn" ++ pr_red_flag pr_ref f)
+ hov 1 (keyword "cbn" ++ pr_red_flag pr_ref f)
| Unfold l ->
- hov 1 (str "unfold" ++ spc() ++
+ hov 1 (keyword "unfold" ++ spc() ++
prlist_with_sep pr_comma (pr_with_occurrences pr_ref) l)
- | Fold l -> hov 1 (str "fold" ++ prlist (pr_arg pr_constr) l)
+ | Fold l -> hov 1 (keyword "fold" ++ prlist (pr_arg pr_constr) l)
| Pattern l ->
- hov 1 (str "pattern" ++
+ hov 1 (keyword "pattern" ++
pr_arg (prlist_with_sep pr_comma (pr_with_occurrences pr_constr)) l)
- | Red true -> error "Shouldn't be accessible from user."
- | ExtraRedExpr s -> str s
- | CbvVm o -> str "vm_compute" ++ pr_opt (pr_with_occurrences pr_pattern) o
- | CbvNative o -> str "native_compute" ++ pr_opt (pr_with_occurrences pr_pattern) o
+ | Red true ->
+ error "Shouldn't be accessible from user."
+ | ExtraRedExpr s ->
+ str s
+ | CbvVm o ->
+ keyword "vm_compute" ++ pr_opt (pr_with_occurrences pr_pattern) o
+ | CbvNative o ->
+ keyword "native_compute" ++ pr_opt (pr_with_occurrences pr_pattern) o
let pr_may_eval test prc prlc pr2 pr3 = function
| ConstrEval (r,c) ->
hov 0
- (str "eval" ++ brk (1,1) ++
- pr_red_expr (prc,prlc,pr2,pr3) r ++
- str " in" ++ spc() ++ prc c)
+ (keyword "eval" ++ brk (1,1) ++
+ pr_red_expr (prc,prlc,pr2,pr3) r ++ spc () ++
+ keyword "in" ++ spc() ++ prc c)
| ConstrContext ((_,id),c) ->
hov 0
- (str "context " ++ pr_id id ++ spc () ++
+ (keyword "context" ++ spc () ++ pr_id id ++ spc () ++
str "[" ++ prlc c ++ str "]")
- | ConstrTypeOf c -> hov 1 (str "type of" ++ spc() ++ prc c)
- | ConstrTerm c when test c -> h 0 (str "(" ++ prc c ++ str ")")
- | ConstrTerm c -> prc c
+ | ConstrTypeOf c ->
+ hov 1 (keyword "type of" ++ spc() ++ prc c)
+ | ConstrTerm c when test c ->
+ h 0 (str "(" ++ prc c ++ str ")")
+ | ConstrTerm c ->
+ prc c
- let pr_may_eval a = pr_may_eval (fun _ -> false) a
+ let pr_may_eval a =
+ pr_may_eval (fun _ -> false) a
end
@@ -762,6 +807,7 @@ end
with tagging functions that do nothing. *)
include Make (struct
let do_not_tag _ x = x
+ let tag_keyword = do_not_tag ()
let tag_unparsing = do_not_tag
let tag_constr_expr = do_not_tag
end)
@@ -773,6 +819,9 @@ end) = struct
include Make (struct
open Ppannotation
+ let tag_keyword t =
+ Pp.open_tag (Indexer.index AKeyword) ++ t ++ Pp.close_tag ()
+
let tag_unparsing unp t =
Pp.open_tag (Indexer.index (AUnparsing unp)) ++ t ++ Pp.close_tag ()