aboutsummaryrefslogtreecommitdiffhomepage
path: root/parsing/printmod.ml
diff options
context:
space:
mode:
authorGravatar soubiran <soubiran@85f007b7-540e-0410-9357-904b9bb8a0f7>2008-02-01 12:18:37 +0000
committerGravatar soubiran <soubiran@85f007b7-540e-0410-9357-904b9bb8a0f7>2008-02-01 12:18:37 +0000
commit7acb63cad5f92c2618f99ca2a812a465092a523f (patch)
treeb673bec4833d608f314c132ff85a0ffc5eab1e0f /parsing/printmod.ml
parent9b913feb3532c15aad771f914627a7a82743e625 (diff)
Beaoucoup de changements dans la representation interne des modules.
kernel: -declaration.ml unification des representations pour les modules et modules types. (type struct_expr_body) -mod_typing.ml le typage des modules est separe de l'evaluation des modules -modops.ml nouvelle fonction qui pour toutes expressions de structure calcule sa forme evaluee.(eval_struct) -safe_typing.ml ajout du support du nouvel operateur Include.(add_include). library: -declaremods.ml nouveaux objets Include et Module-alias et gestion de la resolution de noms pour les alias via la nametab. parsing: -g_vernac.ml4: nouvelles regles pour le support des Includes et pour l'application des signatures fonctorielles. extraction: Adaptation a la nouvelle representation des modules et support de l'operateur with. git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@10497 85f007b7-540e-0410-9357-904b9bb8a0f7
Diffstat (limited to 'parsing/printmod.ml')
-rw-r--r--parsing/printmod.ml96
1 files changed, 61 insertions, 35 deletions
diff --git a/parsing/printmod.ml b/parsing/printmod.ml
index aaf4a662b..69c596093 100644
--- a/parsing/printmod.ml
+++ b/parsing/printmod.ml
@@ -42,11 +42,13 @@ let print_kn locals kn =
pr_qualid qid
with
Not_found ->
- let (mp,_,l) = repr_kn kn in
- print_local_modpath locals mp ++ str"." ++ pr_lab l
+ try
+ print_local_modpath locals kn
+ with
+ Not_found -> print_modpath locals kn
let rec flatten_app mexpr l = match mexpr with
- | MEBapply (mexpr,marg,_) -> flatten_app mexpr (marg::l)
+ | SEBapply (mexpr,marg,_) -> flatten_app mexpr (marg::l)
| mexpr -> mexpr::l
let rec print_module name locals with_body mb =
@@ -57,58 +59,80 @@ let rec print_module name locals with_body mb =
spc () ++ str ":= " ++ print_modexpr locals mexpr
| Some mp, _, _ -> str " == " ++ print_modpath locals mp
in
- hv 2 (str "Module " ++ name ++ spc () ++ str": " ++
- print_modtype locals mb.mod_type ++ body)
-
-and print_modtype locals mty = match mty with
- | MTBident kn -> print_kn locals kn
- | MTBfunsig (mbid,mtb1,mtb2) ->
-(* let env' = Modops.add_module (MPbid mbid) (Modops.body_of_type mtb) env
- in *)
- let locals' = (mbid, get_new_id locals (id_of_mbid mbid))::locals in
- hov 2 (str "Funsig" ++ spc () ++ str "(" ++
- pr_id (id_of_mbid mbid) ++ str " : " ++ print_modtype locals mtb1 ++
- str ")" ++ spc() ++ print_modtype locals' mtb2)
- | MTBsig (msid,sign) ->
+ let modtype = match mb.mod_type with
+ None -> str ""
+ | Some t -> str": " ++
+ print_modtype locals t
+ in
+ hv 2 (str "Module " ++ name ++ spc () ++ modtype ++ body)
+
+and print_modtype locals mty =
+ match mty with
+ | SEBident kn -> print_kn locals kn
+ | SEBfunctor (mbid,mtb1,mtb2) ->
+ (* let env' = Modops.add_module (MPbid mbid)
+ (Modops.body_of_type mtb) env
+ in *)
+ let locals' = (mbid, get_new_id locals (id_of_mbid mbid))
+ ::locals in
+ hov 2 (str "Funsig" ++ spc () ++ str "(" ++
+ pr_id (id_of_mbid mbid) ++ str " : " ++
+ print_modtype locals mtb1 ++
+ str ")" ++ spc() ++ print_modtype locals' mtb2)
+ | SEBstruct (msid,sign) ->
hv 2 (str "Sig" ++ spc () ++ print_sig locals msid sign ++ brk (1,-2) ++ str "End")
+ | SEBapply (mexpr,marg,_) ->
+ let lapp = flatten_app mexpr [marg] in
+ let fapp = List.hd lapp in
+ let mapp = List.tl lapp in
+ hov 3 (str"(" ++ (print_modtype locals fapp) ++ spc () ++
+ prlist_with_sep spc (print_modexpr locals) mapp ++ str")")
+ | SEBwith(seb,With_definition_body(idl,cb))->
+ let s = (String.concat "." (List.map string_of_id idl)) in
+ hov 2 (print_modtype locals seb ++ spc() ++ str "with" ++ spc() ++
+ str "Definition"++ spc() ++ str s ++ spc() ++ str ":="++ spc())
+ | SEBwith(seb,With_module_body(idl,mp,_))->
+ let s =(String.concat "." (List.map string_of_id idl)) in
+ hov 2 (print_modtype locals seb ++ spc() ++ str "with" ++ spc() ++
+ str "Module"++ spc() ++ str s ++ spc() ++ str ":="++ spc())
and print_sig locals msid sign =
let print_spec (l,spec) = (match spec with
- | SPBconst {const_body=Some _; const_opaque=false} -> str "Definition "
- | SPBconst {const_body=None}
- | SPBconst {const_opaque=true} -> str "Parameter "
- | SPBmind _ -> str "Inductive "
- | SPBmodule _ -> str "Module "
- | SPBmodtype _ -> str "Module Type ") ++ str (string_of_label l)
+ | SFBconst {const_body=Some _; const_opaque=false} -> str "Definition "
+ | SFBconst {const_body=None}
+ | SFBconst {const_opaque=true} -> str "Parameter "
+ | SFBmind _ -> str "Inductive "
+ | SFBmodule _ -> str "Module "
+ | SFBmodtype _ -> str "Module Type ") ++ str (string_of_label l)
in
prlist_with_sep spc print_spec sign
and print_struct locals msid struc =
let print_body (l,body) = (match body with
- | SEBconst {const_body=Some _; const_opaque=false} -> str "Definition "
- | SEBconst {const_body=Some _; const_opaque=true} -> str "Theorem "
- | SEBconst {const_body=None} -> str "Parameter "
- | SEBmind _ -> str "Inductive "
- | SEBmodule _ -> str "Module "
- | SEBmodtype _ -> str "Module Type ") ++ str (string_of_label l)
+ | SFBconst {const_body=Some _; const_opaque=false} -> str "Definition "
+ | SFBconst {const_body=Some _; const_opaque=true} -> str "Theorem "
+ | SFBconst {const_body=None} -> str "Parameter "
+ | SFBmind _ -> str "Inductive "
+ | SFBmodule _ -> str "Module "
+ | SFBmodtype _ -> str "Module Type ") ++ str (string_of_label l)
in
prlist_with_sep spc print_body struc
and print_modexpr locals mexpr = match mexpr with
- | MEBident mp -> print_modpath locals mp
- | MEBfunctor (mbid,mty,mexpr) ->
+ | SEBident mp -> print_modpath locals mp
+ | SEBfunctor (mbid,mty,mexpr) ->
(* let env' = Modops.add_module (MPbid mbid) (Modops.body_of_type mtb) env
in *)
let locals' = (mbid, get_new_id locals (id_of_mbid mbid))::locals in
hov 2 (str "Functor" ++ spc() ++ str"[" ++ pr_id(id_of_mbid mbid) ++
str ":" ++ print_modtype locals mty ++
str "]" ++ spc () ++ print_modexpr locals' mexpr)
- | MEBstruct (msid, struc) ->
+ | SEBstruct (msid, struc) ->
hv 2 (str "Struct" ++ spc () ++ print_struct locals msid struc ++ brk (1,-2) ++ str "End")
- | MEBapply (mexpr,marg,_) ->
+ | SEBapply (mexpr,marg,_) ->
let lapp = flatten_app mexpr [marg] in
hov 3 (str"(" ++ prlist_with_sep spc (print_modexpr locals) lapp ++ str")")
-
+ | SEBwith (_,_)-> anomaly "Not avaible yet"
let rec printable_body dir =
@@ -128,6 +152,8 @@ let print_module with_body mp =
print_module name [] with_body (Global.lookup_module mp) ++ fnl ()
let print_modtype kn =
+ let mtb = match Global.lookup_modtype kn with
+ | mtb,_ -> mtb in
let name = print_kn [] kn in
- str "Module Type " ++ name ++ str " = " ++
- print_modtype [] (Global.lookup_modtype kn) ++ fnl ()
+ str "Module Type " ++ name ++ str " = " ++
+ print_modtype [] mtb ++ fnl ()