summaryrefslogtreecommitdiffstats
path: root/perl_checker.src/parser_helper.ml
diff options
context:
space:
mode:
authorPascal Rigaux <pixel@mandriva.com>2004-04-28 12:34:42 +0000
committerPascal Rigaux <pixel@mandriva.com>2004-04-28 12:34:42 +0000
commit213d18c0842317ae689d860d2882aac0543aeeea (patch)
tree156054215090c433bf9136a08b6626a2e2489940 /perl_checker.src/parser_helper.ml
parent5086a51d09b7d5333b8b39927dba18f04c249237 (diff)
downloadperl_checker-213d18c0842317ae689d860d2882aac0543aeeea.tar
perl_checker-213d18c0842317ae689d860d2882aac0543aeeea.tar.gz
perl_checker-213d18c0842317ae689d860d2882aac0543aeeea.tar.bz2
perl_checker-213d18c0842317ae689d860d2882aac0543aeeea.tar.xz
perl_checker-213d18c0842317ae689d860d2882aac0543aeeea.zip
get_pos_from_expr() (previously named get_pos_from_tree()) is useful, even in parser_helper
Diffstat (limited to 'perl_checker.src/parser_helper.ml')
-rw-r--r--perl_checker.src/parser_helper.ml34
1 files changed, 34 insertions, 0 deletions
diff --git a/perl_checker.src/parser_helper.ml b/perl_checker.src/parser_helper.ml
index cefff7b..fc578a1 100644
--- a/perl_checker.src/parser_helper.ml
+++ b/perl_checker.src/parser_helper.ml
@@ -168,6 +168,40 @@ let from_array esp =
| Deref(I_array, ident) -> ident
| _ -> internal_error "from_array"
+let rec get_pos_from_expr = function
+ | Anonymous_sub(_, _, pos)
+ | String(_, pos)
+ | Call_op(_, _, pos)
+ | Perl_checker_comment(_, pos)
+ | My_our(_, _, pos)
+ | Raw_string(_, pos)
+ | Num(_, pos)
+ | Ident(_, _, pos)
+ -> pos
+
+ | Package e
+ | Ref(_, e)
+ | Deref(_, e)
+ | Sub_declaration(e, _, _, _)
+ | Deref_with(_, _, e, _)
+ | Use(e, _)
+ | Call(e, _)
+ | Method_call(_, e, _)
+ -> get_pos_from_expr e
+
+ | Diamond(option_e)
+ -> if option_e = None then raw_pos2pos bpos else get_pos_from_expr (some option_e)
+
+ | List l
+ | Block l
+ -> if l = [] then raw_pos2pos bpos else get_pos_from_expr (List.hd l)
+
+ | Semi_colon
+ | Too_complex
+ | Undef
+ | Label _
+ -> raw_pos2pos bpos
+
let msg_with_rawpos (start, end_) msg = Info.pos2sfull_current start end_ ^ msg
let die_with_rawpos raw_pos msg = failwith (msg_with_rawpos raw_pos msg)
let warn raw_pos msg = print_endline_flush (msg_with_rawpos raw_pos msg)