Release coccinelle-0.1.2
[bpt/coccinelle.git] / parsing_c / flag_parsing_c.ml
index c1b1b54..049e3ff 100644 (file)
@@ -1,15 +1,32 @@
 (*****************************************************************************)
 (* convenient globals to pass to parse_c.init_defs *)
 (*****************************************************************************)
-let path = Filename.concat (Sys.getenv "HOME") "coccinelle"
-let std_h   = ref (Filename.concat path "standard.h")
+let path = ref 
+  (try (Sys.getenv "YACFE_HOME")
+    with Not_found-> "/home/pad/c-yacfe"
+  )
+let std_h   = ref (Filename.concat !path "data/standard.h")
+let common_h   = ref (Filename.concat !path "data/common_macros.h")
+
 
 let cmdline_flags_macrofile () = 
   [
     "-macro_file", Arg.Set_string std_h,
     " <file> (default=" ^ !std_h ^ ")";
-    "-D",   Arg.Set_string std_h,     
-    " short option of -macro_file";
+  ]
+
+
+(*****************************************************************************)
+(* used only by cpp_ast_c, not by the parser *)
+(*****************************************************************************)
+let cpp_i_opts = ref []
+let cpp_d_opts = ref []
+
+let cmdline_flags_cpp () = [
+    "-D",   Arg.String (fun s -> Common.push2 s cpp_d_opts),
+    " <x=y>";
+    "-I", Arg.String (fun s -> Common.push2 s cpp_i_opts),
+    " <dir>"
   ]
 
 (*****************************************************************************)
@@ -21,8 +38,11 @@ let verbose_parsing = ref true
 let verbose_type    = ref true
 
 let filter_msg = ref false
+let filter_msg_define_error = ref false
+
 let filter_define_error = ref false
-let filter_classic_passed = ref false
+
+let filter_passed_level = ref 0
 
 let pretty_print_type_info = ref false
 
@@ -40,8 +60,12 @@ let cmdline_flags_verbose () =
     
     "-filter_msg",      Arg.Set  filter_msg , 
     "  filter some cpp message when the macro is a \"known\" cpp construct";
-    "-filter_define_error",Arg.Set filter_define_error,"  ";
-    "-filter_classic_passed",Arg.Set filter_classic_passed,"  ";
+    "-filter_msg_define_error",Arg.Set filter_msg_define_error,
+    "  filter the error msg";
+
+    "-filter_define_error",Arg.Set filter_define_error,
+    "  filter the error, which will not be added in the stat";
+    "-filter_passed_level",Arg.Set_int filter_passed_level,"  ";
   ]
 
 
@@ -74,23 +98,41 @@ let cmdline_flags_debugging () =
 (* change algo *)
 (*****************************************************************************)
 
-let ifdef_to_if = ref false
-let if0_passing = ref true
-let add_typedef_root = ref true
-
 (* cocci specific *)
 let label_strategy_2 = ref false
 
 let cmdline_flags_algos () =
   [
-    "-ifdef",              Arg.Set ifdef_to_if, 
-    "   convert ifdef to if (buggy!)";
+    "-l1",                Arg.Clear label_strategy_2, " ";
+  ]
+
+(*****************************************************************************)
+(* Disable parsing feature (for CC09 and also to see if useful) *)
+(*****************************************************************************)
+
+let cpp_directive_passing = ref false
+let ifdef_directive_passing = ref false 
+
+let disable_two_pass = ref false
+let disable_add_typedef = ref false
+
+let if0_passing = ref true
+let add_typedef_root = ref true
+
+let cmdline_flags_parsing_algos () = [
+
+    "-directive_passing",              Arg.Set cpp_directive_passing, 
+    "   pass most cpp directives, especially when inside function";
+    "-ifdef_passing",              Arg.Set ifdef_directive_passing, 
+    "   pass ifdef directives ";
+
     "-noif0_passing",   Arg.Clear if0_passing, 
     " ";
     "-noadd_typedef_root",   Arg.Clear add_typedef_root, " ";
+    "-noadd_typedef",   Arg.Set disable_add_typedef, " ";
 
-    "-l1",                Arg.Clear label_strategy_2, " ";
-  ]
+    "-disable_two_pass", Arg.Set disable_two_pass, " ";
+]
 
 (*****************************************************************************)
 (* other *)