summaryrefslogtreecommitdiffstats
path: root/perl_checker.src/parser_helper.ml
diff options
context:
space:
mode:
authorPascal Rigaux <pixel@mandriva.com>2004-12-13 12:51:09 +0000
committerPascal Rigaux <pixel@mandriva.com>2004-12-13 12:51:09 +0000
commit48905afa579ab67d94b415c22c658754a3c9cc75 (patch)
tree545d3105519b74316b44ed71555065f42c1cb9d5 /perl_checker.src/parser_helper.ml
parent006715b82b42bf2c7008897b3ff4fe9f24435442 (diff)
downloadperl_checker-48905afa579ab67d94b415c22c658754a3c9cc75.tar
perl_checker-48905afa579ab67d94b415c22c658754a3c9cc75.tar.gz
perl_checker-48905afa579ab67d94b415c22c658754a3c9cc75.tar.bz2
perl_checker-48905afa579ab67d94b415c22c658754a3c9cc75.tar.xz
perl_checker-48905afa579ab67d94b415c22c658754a3c9cc75.zip
- ugly hack to workaround uniop calls priority pb, but at least have a P_uniop instead of using P_mul
- add delete as a uniop
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