aboutsummaryrefslogtreecommitdiff
path: root/parsing/printer.ml
diff options
context:
space:
mode:
Diffstat (limited to 'parsing/printer.ml')
-rw-r--r--parsing/printer.ml151
1 files changed, 74 insertions, 77 deletions
diff --git a/parsing/printer.ml b/parsing/printer.ml
index 89bbdb2e9a..da78f8352e 100644
--- a/parsing/printer.ml
+++ b/parsing/printer.ml
@@ -86,28 +86,28 @@ let gentermpr gt =
(* [at_top] means ids of env must be avoided in bound variables *)
let gentermpr_core at_top env t =
- gentermpr (Termast.ast_of_constr at_top (unitize_env env) t)
+ gentermpr (Termast.ast_of_constr at_top env t)
let prterm_env_at_top env = gentermpr_core true env
let prterm_env env = gentermpr_core false env
-let prterm = prterm_env (gLOB nil_sign)
+let prterm = prterm_env empty_env
let prtype_env env typ = prterm_env env (incast_type typ)
-let prtype = prtype_env (gLOB nil_sign)
+let prtype = prtype_env empty_env
let prjudge_env env j =
(prterm_env env j.uj_val, prterm_env env (incast_type j.uj_type))
-let prjudge = prjudge_env (gLOB nil_sign)
+let prjudge = prjudge_env empty_env
(* Plus de "k"...
let gentermpr k = gentermpr_core false
let gentermpr_at_top k = gentermpr_core true
let fprterm_env a = gentermpr FW a
-let fprterm = fprterm_env (gLOB nil_sign)
+let fprterm = fprterm_env empty_env
let fprtype_env env typ = fprterm_env env (incast_type typ)
-let fprtype = fprtype_env (gLOB nil_sign)
+let fprtype = fprtype_env empty_env
*)
let fprterm_env a =
@@ -123,27 +123,23 @@ let fprtype a =
(* For compatibility *)
let fterm0 = fprterm_env
-let pr_constant env cst = gentermpr (ast_of_constant (unitize_env env) cst)
-let pr_existential env ev = gentermpr (ast_of_existential (unitize_env env) ev)
-let pr_inductive env ind = gentermpr (ast_of_inductive (unitize_env env) ind)
+let pr_constant env cst = gentermpr (ast_of_constant env cst)
+let pr_existential env ev = gentermpr (ast_of_existential env ev)
+let pr_inductive env ind = gentermpr (ast_of_inductive env ind)
let pr_constructor env cstr =
- gentermpr (ast_of_constructor (unitize_env env) cstr)
+ gentermpr (ast_of_constructor env cstr)
open Pattern
let pr_ref_label = function (* On triche sur le contexte *)
- | ConstNode sp -> pr_constant (Global.context()) (sp,[||])
- | IndNode sp -> pr_inductive (Global.context()) (sp,[||])
- | CstrNode sp -> pr_constructor (Global.context()) (sp,[||])
+ | ConstNode sp -> pr_constant (Global.env()) (sp,[||])
+ | IndNode sp -> pr_inductive (Global.env()) (sp,[||])
+ | CstrNode sp -> pr_constructor (Global.env()) (sp,[||])
| VarNode id -> print_id id
let pr_cases_pattern t = gentermpr (Termast.ast_of_cases_pattern t)
let pr_rawterm t = gentermpr (Termast.ast_of_rawconstr t)
-let pr_pattern_env env t =
- gentermpr (Termast.ast_of_pattern (unitize_env env) t)
-let pr_pattern t = pr_pattern_env (gLOB nil_sign) t
-
-(* For compatibility *)
-let term0 = prterm_env
+let pr_pattern_env env t = gentermpr (Termast.ast_of_pattern env t)
+let pr_pattern t = pr_pattern_env empty_names_context t
let rec gentacpr gt =
Esyntax.genprint default_tacpr tactic_syntax_universe tactic_initial_prec gt
@@ -155,86 +151,87 @@ and default_tacpr = function
[< 'sTR s; 'bRK(1,2); hOV 0 (prlist_with_sep pr_spc gentacpr ta) >]
| gt -> dfltpr gt
-let print_decl sign (s,typ) =
- let ptyp = prterm_env (gLOB sign) (body_of_type typ) in
- [< print_id s ; 'sTR" : "; ptyp >]
-
-let print_binding env (na,typ) =
- let ptyp = prterm_env env (body_of_type typ) in
+let pr_var_decl env (id,c,typ) =
+ let pbody = match c with
+ | None -> [< >]
+ | Some c -> [< 'sTR" := "; prterm_env env c >] in
+ let ptyp = [< 'sTR" : "; prtype_env env typ >] in
+ [< print_id id ; hOV 0 [< pbody; ptyp >] >]
+
+let pr_rel_decl env (na,c,typ) =
+ let pbody = match c with
+ | None -> [< >]
+ | Some c -> [< 'sTR" :="; 'sPC; prterm_env env c >] in
+ let ptyp = prtype_env env typ in
match na with
- | Anonymous -> [< 'sTR"<>" ; 'sTR" : " ; ptyp >]
- | Name id -> [< print_id id ; 'sTR" : "; ptyp >]
+ | Anonymous -> [< 'sTR"<>" ; 'sPC; pbody; 'sTR" :"; 'sPC; ptyp >]
+ | Name id -> [< print_id id ; 'sPC; pbody; 'sTR" :"; 'sPC; ptyp >]
(* Prints out an "env" in a nice format. We print out the
* signature,then a horizontal bar, then the debruijn environment.
* It's printed out from outermost to innermost, so it's readable. *)
-let sign_it_with f sign e =
- snd (sign_it (fun id t (sign,e) -> (add_sign (id,t) sign, f id t sign e))
- sign (nil_sign,e))
-
-let sign_it_with_i f sign e =
- let (_,_,e') =
- (sign_it (fun id t (i,sign,e) -> (i+1,add_sign (id,t) sign,
- f i id t sign e))
- sign (0,nil_sign,e))
- in
- e'
-
-let dbenv_it_with f env e =
- snd (dbenv_it (fun na t (env,e) -> (add_rel (na,t) env, f na t env e))
- env (gLOB(get_globals env),e))
-
(* Prints a signature, all declarations on the same line if possible *)
-let pr_sign sign =
- hV 0 [< (sign_it_with (fun id t sign pps ->
- [< pps; 'wS 2; print_decl sign (id,t) >])
- sign) [< >] >]
+let pr_var_context_of env =
+ hV 0 [< (fold_var_context
+ (fun env d pps -> [< pps; 'wS 2; pr_var_decl env d >])
+ env) [< >] >]
+
+let pr_rel_context env rel_context =
+ let rec prec env = function
+ | [] -> [<>]
+ | [b] -> pr_rel_decl env b
+ | b::rest ->
+ let pb = pr_rel_decl env b in
+ let penvtl = prec (push_rel b env) rest in
+ [< pb; 'sTR";"; 'sPC; penvtl >]
+ in
+ prec env (List.rev rel_context)
(* Prints an env (variables and de Bruijn). Separator: newline *)
-let pr_env env =
+let pr_context_unlimited env =
let sign_env =
- sign_it_with
- (fun id t sign pps ->
- let pidt = print_decl sign (id,t) in [< pps; 'fNL; pidt >])
- (get_globals env) [< >]
+ fold_var_context
+ (fun env d pps ->
+ let pidt = pr_var_decl env d in [< pps; 'fNL; pidt >])
+ env [< >]
in
let db_env =
- dbenv_it_with
- (fun na t env pps ->
- let pnat = print_binding env (na,t) in [< pps; 'fNL; pnat >])
+ fold_rel_context
+ (fun env d pps ->
+ let pnat = pr_rel_decl env d in [< pps; 'fNL; pnat >])
env [< >]
in
[< sign_env; db_env >]
-let pr_ne_env header k = function
- | ENVIRON (sign,_) as env when isnull_sign sign & isnull_rel_env env -> [< >]
- | env -> let penv = pr_env env in [< header; penv >]
+let pr_ne_context_of header k env =
+ if Environ.context env = empty_context then [< >]
+ else let penv = pr_context_unlimited env in [< header; penv >]
-let pr_env_limit n env =
- let sign = get_globals env in
- let lgsign = sign_length sign in
+let pr_context_limit n env =
+ let var_context = Environ.var_context env in
+ let lgsign = List.length var_context in
if n >= lgsign then
- pr_env env
+ pr_context_unlimited env
else
let k = lgsign-n in
- let sign_env =
- sign_it_with_i
- (fun i id t sign pps ->
+ let _,sign_env =
+ fold_var_context
+ (fun env d (i,pps) ->
if i < k then
- [< pps ;'sTR "." >]
+ (i+1, [< pps ;'sTR "." >])
else
- let pidt = print_decl sign (id,t) in
- [< pps ; 'fNL ;
- 'sTR (emacs_str (String.make 1 (Char.chr 253)));
- pidt >])
- (get_globals env) [< >]
+ let pidt = pr_var_decl env d in
+ (i+1, [< pps ; 'fNL ;
+ 'sTR (emacs_str (String.make 1 (Char.chr 253)));
+ pidt >]))
+ env (0,[< >])
in
let db_env =
- dbenv_it_with
- (fun na t env pps ->
- let pnat = print_binding env (na,t) in
+ fold_rel_context
+ (fun env d pps ->
+ let pnat = pr_rel_decl env d in
[< pps; 'fNL;
'sTR (emacs_str (String.make 1 (Char.chr 253)));
pnat >])
@@ -242,6 +239,6 @@ let pr_env_limit n env =
in
[< sign_env; db_env >]
-let pr_env_opt env = match Options.print_hyps_limit () with
- | None -> hV 0 (pr_env env)
- | Some n -> hV 0 (pr_env_limit n env)
+let pr_context_of env = match Options.print_hyps_limit () with
+ | None -> hV 0 (pr_context_unlimited env)
+ | Some n -> hV 0 (pr_context_limit n env)