aboutsummaryrefslogtreecommitdiffhomepage
path: root/parsing/astmod.ml
diff options
context:
space:
mode:
Diffstat (limited to 'parsing/astmod.ml')
-rw-r--r--parsing/astmod.ml69
1 files changed, 15 insertions, 54 deletions
diff --git a/parsing/astmod.ml b/parsing/astmod.ml
index 9c0915a4f..cbb19fa0b 100644
--- a/parsing/astmod.ml
+++ b/parsing/astmod.ml
@@ -65,31 +65,13 @@ let lookup_qualid (modtype:bool) qid =
and the basename. Searches Nametab otherwise.
*)
-let lookup_module binders qid =
- try
- let dir,id = repr_qualid qid in
- (* dirpath in natural order *)
- let idl = List.rev (id::repr_dirpath dir) in
- let top_mp = MPbound (fst (List.assoc (List.hd idl) binders)) in
- make_mp top_mp (List.tl idl)
- with
- Not_found -> Nametab.locate_module qid
+let lookup_module qid =
+ Nametab.locate_module qid
-let lookup_modtype binders qid =
- try
- let dir,id = repr_qualid qid in
- (* dirpath in natural order *)
- match List.rev (repr_dirpath dir) with
- | hd::tl ->
- let top_mp = MPbound (fst (List.assoc hd binders)) in
- let mp = make_mp top_mp tl in
- make_kn mp empty_dirpath (label_of_id id)
- | [] -> raise Not_found
- (* may-be a module, but not a module type!*)
- with
- Not_found -> Nametab.locate_modtype qid
+let lookup_modtype qid =
+ Nametab.locate_modtype qid
-let transl_with_decl binders = function
+let transl_with_decl env = function
| Node(loc,"WITHMODULE",[id_ast;qid_ast]) ->
let id = match id_ast with
Nvar(_,id) -> id
@@ -100,22 +82,22 @@ let transl_with_decl binders = function
interp_qualid astl
| _ -> anomaly "QUALID expected"
in
- With_Module (id,lookup_module binders qid)
+ With_Module (id,lookup_module qid)
| Node(loc,"WITHDEFINITION",[id_ast;cast]) ->
let id = match id_ast with
Nvar(_,id) -> id
| _ -> anomaly "Identifier AST expected"
in
- let c = interp_constr Evd.empty (Global.env()) cast in
+ let c = interp_constr Evd.empty env cast in
With_Definition (id,c)
| _ -> anomaly "Unexpected AST"
-let rec transl_modtype binders = function
+let rec interp_modtype env = function
| Node(loc,"MODTYPEQID",qid_ast) -> begin match qid_ast with
| [Node (loc, "QUALID", astl)] ->
let qid = interp_qualid astl in begin
try
- MTEident (lookup_modtype binders qid)
+ MTEident (lookup_modtype qid)
with
| Not_found ->
Modops.error_not_a_modtype (*loc*) (string_of_qualid qid)
@@ -123,32 +105,18 @@ let rec transl_modtype binders = function
| _ -> anomaly "QUALID expected"
end
| Node(loc,"MODTYPEWITH",[mty_ast;decl_ast]) ->
- let mty = transl_modtype binders mty_ast in
- let decl = transl_with_decl binders decl_ast in
+ let mty = interp_modtype env mty_ast in
+ let decl = transl_with_decl env decl_ast in
MTEwith(mty,decl)
| _ -> anomaly "TODO: transl_modtype: I can handle qualid module types only"
-let transl_binder binders (idl,mty_ast) =
- let mte = transl_modtype binders mty_ast in
- let add_one binders id =
- if List.mem_assoc id binders then
- error "Two identical module binders..."
- else
- let mbid = make_mbid (Lib.module_dp()) (string_of_id id) in
- (id,(mbid,mte))::binders
- in
- List.fold_left add_one binders idl
-
-let transl_binders = List.fold_left transl_binder
-
-
-let rec transl_modexpr binders = function
+let rec interp_modexpr env = function
| Node(loc,"MODEXPRQID",qid_ast) -> begin match qid_ast with
| [Node (loc, "QUALID", astl)] ->
let qid = interp_qualid astl in begin
try
- MEident (lookup_module binders qid)
+ MEident (lookup_module qid)
with
| Not_found ->
Modops.error_not_a_module (*loc*) (string_of_qualid qid)
@@ -156,17 +124,10 @@ let rec transl_modexpr binders = function
| _ -> anomaly "QUALID expected"
end
| Node(_,"MODEXPRAPP",[ast1;ast2]) ->
- let me1 = transl_modexpr binders ast1 in
- let me2 = transl_modexpr binders ast2 in
+ let me1 = interp_modexpr env ast1 in
+ let me2 = interp_modexpr env ast2 in
MEapply(me1,me2)
| Node(_,"MODEXPRAPP",_) ->
anomaly "transl_modexpr: MODEXPRAPP must have two arguments"
| _ -> anomaly "transl_modexpr: I can handle MODEXPRQID or MODEXPRAPP only..."
-
-let interp_module_decl evd env args_ast mty_ast_o mexpr_ast_o =
- let binders = transl_binders [] args_ast in
- let mty_o = option_app (transl_modtype binders) mty_ast_o in
- let mexpr_o = option_app (transl_modexpr binders) mexpr_ast_o in
- (List.rev binders, mty_o, mexpr_o)
-