From 0dbfb00bcca5d560c93df23c85c5212dfc004da4 Mon Sep 17 00:00:00 2001 From: Pascal Rigaux Date: Mon, 15 Dec 2003 14:35:14 +0000 Subject: - correctly handle "shift" with no parameter at toplevel - remove (hopefully) unused code rewriting shift -> shift(@_) --- perl_checker.src/global_checks.ml | 3 +++ perl_checker.src/parser_helper.ml | 3 +-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/perl_checker.src/global_checks.ml b/perl_checker.src/global_checks.ml index 6e7b46c..0c45783 100644 --- a/perl_checker.src/global_checks.ml +++ b/perl_checker.src/global_checks.ml @@ -281,6 +281,9 @@ let check_variables vars t = | Call(Deref(I_func, Ident(None, "require", _)), [Ident _]) -> Some vars + | Call(Deref(I_func, Ident(None, "shift", pos)) as var, []) -> + check vars (Call(var, [ Deref(I_array, Ident(None, (if vars.is_toplevel then "ARGV" else "_"), pos)) ])) + | Call(Deref(context, (Ident(_, _, pos) as var)), para) -> check_variable (context, var) vars (Some(pos, para)) ; let vars = List.fold_left check_variables_ vars para in diff --git a/perl_checker.src/parser_helper.ml b/perl_checker.src/parser_helper.ml index caaf0e7..ba30b58 100644 --- a/perl_checker.src/parser_helper.ml +++ b/perl_checker.src/parser_helper.ml @@ -311,7 +311,6 @@ let word_alone esp = Call(Deref(I_func, word), [var_dollar_ pos]) | "split" -> Call(Deref(I_func, word), [ Raw_string(" ", pos) ; var_dollar_ pos ]) - | "shift" -> Call(Deref(I_func, word), [ Deref(I_array, Ident(None, "_", raw_pos2pos bpos)) ]) | "die" -> Call(Deref(I_func, word), [ Deref(I_scalar, Ident(None, "@", raw_pos2pos bpos)) ]) | "return" | "eof" | "caller" | "redo" | "next" | "last" -> @@ -855,7 +854,7 @@ let call_one_scalar_para { any = e ; pos = pos } para esp_start esp_end = match para with | [] -> if e = "shift" then - [ Deref(I_array, Ident(None, "_", raw_pos2pos pos)) ] + [] (* can't decide here *) else (if not (List.mem e [ "length" ]) then warn_rule (sprintf "please use \"%s $_\" instead of \"%s\"" e e) ; [var_dollar_ (raw_pos2pos pos)]) -- cgit v1.2.1