summaryrefslogtreecommitdiffstats
path: root/src/tree.ml
diff options
context:
space:
mode:
Diffstat (limited to 'src/tree.ml')
-rw-r--r--src/tree.ml19
1 files changed, 11 insertions, 8 deletions
diff --git a/src/tree.ml b/src/tree.ml
index 16fd0e4..f21b9c1 100644
--- a/src/tree.ml
+++ b/src/tree.ml
@@ -188,7 +188,7 @@ let get_uses t =
uses
| Use(Ident(None, "base", _), classes) ->
let l = List.map (fun (pkg, pos) -> (pkg, (None, pos))) (collect from_qw_raw classes) in
- l @ uses
+ List.filter (fun (pkg, _) -> not (uses_external_package pkg)) l @ uses
| Use(Ident(_, _, pos) as pkg, l) ->
let package = string_of_fromparser pkg in
if uses_external_package package then
@@ -204,18 +204,20 @@ let get_uses t =
) [] t
let get_isa t =
+ let get_isa_ isa exporter pos classes =
+ if isa <> None || exporter <> None then die_with_pos pos "\"use base\" and \"@ISA\" must be used once only";
+ let special, l = List.partition (fun (s, _) -> s = "DynaLoader" || s = "Exporter") classes in
+ let exporter = if List.mem_assoc "Exporter" special then Some pos else None in
+ let isa = if l = [] && special <> [] then None else Some l in
+ isa, exporter
+ in
List.fold_left (fun (isa, exporter) e ->
match e with
| Use(Ident(None, "base", pos), classes) ->
- if isa <> None || exporter <> None then die_with_pos pos "\"use base\" and \"@ISA\" must be used once only";
- Some (collect from_qw_raw classes), None
+ get_isa_ isa exporter pos (collect from_qw_raw classes)
| List [ Call_op("=", [ Deref(I_array, Ident(None, "ISA", pos)) ; classes ], _) ]
| List [ Call_op("=", [ My_our("our", [ I_array, "ISA" ], pos) ; classes ], _) ] ->
- if isa <> None || exporter <> None then die_with_pos pos "\"use base\" and \"@ISA\" must be used once only";
- let special, l = List.partition (fun (s, _) -> s = "DynaLoader" || s = "Exporter") (from_qw_raw classes) in
- let exporter = if List.mem_assoc "Exporter" special then Some pos else None in
- let isa = if l = [] && special <> [] then None else Some l in
- isa, exporter
+ get_isa_ isa exporter pos (from_qw_raw classes)
| _ -> isa, exporter
) (None, None) t
@@ -308,6 +310,7 @@ let get_vars_declaration global_vars_declared file_name package =
| Sub_declaration(Ident(Some fq, name, pos), perl_proto, body, _) ->
Hashtbl.replace global_vars_declared (I_func, fq, name) (pos, get_proto perl_proto body)
+
| List [ Call_op("=", [My_our("our", ours, pos); _], _) ]
| List [ Call_op("=", [My_our("local", ([ I_scalar, "_" ] as ours), pos); _], _) ]
| List [ My_our("our", ours, pos) ]