From f37d7371879e2b1e2d923ec12762430b3d1937fc Mon Sep 17 00:00:00 2001 From: Pascal Rigaux Date: Wed, 25 Apr 2007 15:16:22 +0000 Subject: re-sync after the big svn loss --- src/tree.ml | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) (limited to 'src/tree.ml') 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) ] -- cgit v1.2.1