summaryrefslogtreecommitdiffstats
path: root/perl_checker.src/parser_helper.ml
diff options
context:
space:
mode:
Diffstat (limited to 'perl_checker.src/parser_helper.ml')
-rw-r--r--perl_checker.src/parser_helper.ml12
1 files changed, 8 insertions, 4 deletions
diff --git a/perl_checker.src/parser_helper.ml b/perl_checker.src/parser_helper.ml
index 731b78f..43d60a4 100644
--- a/perl_checker.src/parser_helper.ml
+++ b/perl_checker.src/parser_helper.ml
@@ -317,6 +317,8 @@ let rec prio_less = function
| P_eq, _ -> false
| _, P_cmp -> true
| P_cmp, _ -> false
+ | _, P_uniop -> true
+ | P_uniop, _ -> false
| _, P_add -> true
| P_add, _ -> false
| _, P_mul -> true
@@ -337,8 +339,10 @@ let prio_lo_check pri_out pri_in pos expr =
prio_less(pri_in', pri_out) && not_complex (un_parenthesize expr) then
warn [Warn_suggest_simpler] pos "unneeded parentheses"
| _ -> ())
- else
+ else
(match expr with
+ | Call(Deref(I_func, Ident(None, f, _)), _) when f <> "delete" && pri_in = P_uniop && pri_out = P_add
+ -> () (* ugly special case since we don't parse uniop correctly (eg: -d $_ . "foo" *)
| Call_op ("print", [Deref (I_star, Ident (None, "STDOUT", _)); (Deref(I_scalar, _) as ident)], _) ->
warn [Warn_traps] pos (sprintf "use parentheses: replace \"print %s ...\" with \"print(%s ...)\"" (string_of_fromparser ident) (string_of_fromparser ident))
| _ -> warn [Warn_traps] pos "missing parentheses (needed for clarity)")
@@ -1088,8 +1092,8 @@ let call_with_paren esp_func esp_para = check_return esp_func esp_para; call_and
let call_func esp_func esp_para =
call_and_context(esp_func.any, esp_para.any.expr) true P_tok esp_func esp_para
-let call_one_scalar_para { any = e ; pos = pos } para esp_start esp_end =
- let para =
+let call_one_scalar_para prio { any = e ; pos = pos } para esp_start esp_end =
+ let para' =
match para with
| [] ->
if e = "shift" || e = "pop" then
@@ -1099,7 +1103,7 @@ let call_one_scalar_para { any = e ; pos = pos } para esp_start esp_end =
[var_dollar_ (raw_pos2pos pos)])
| _ -> para
in
- new_pesp M_unknown P_mul (call(Deref(I_func, Ident(None, e, raw_pos2pos pos)), para)) esp_start esp_end
+ new_pesp M_unknown prio (call(Deref(I_func, Ident(None, e, raw_pos2pos pos)), para')) esp_start esp_end
let (current_lexbuf : Lexing.lexbuf option ref) = ref None