permit multiline comments and strings in macros
[bpt/coccinelle.git] / parsing_c / flag_parsing_c.ml
index cfdeceb..6b17c34 100644 (file)
@@ -1,7 +1,7 @@
 (*****************************************************************************)
 (* convenient globals. *)
 (*****************************************************************************)
-let path = ref 
+let path = ref
   (try (Sys.getenv "YACFE_HOME")
     with Not_found-> "/home/pad/c-yacfe"
   )
@@ -10,9 +10,9 @@ let path = ref
 (* macros *)
 (*****************************************************************************)
 
-let macro_dir = "config/macros/" 
-let mk_macro_path ~cocci_path file = 
-  Filename.concat cocci_path (macro_dir ^ file) 
+let macro_dir = "config/macros/"
+let mk_macro_path ~cocci_path file =
+  Filename.concat cocci_path (macro_dir ^ file)
 
 
 (* to pass to parse_c.init_defs *)
@@ -20,9 +20,9 @@ let std_h   = ref (mk_macro_path ~cocci_path:!path "standard.h")
 let common_h   = ref (mk_macro_path ~cocci_path:!path "common_macros.h")
 
 
-let cmdline_flags_macrofile () = 
+let cmdline_flags_macrofile () =
   [
-    "-macro_file_builtins", Arg.Set_string std_h,
+    "--macro-file-builtins", Arg.Set_string std_h,
     " <file> (default=" ^ !std_h ^ ")";
   ]
 
@@ -45,9 +45,9 @@ let cmdline_flags_cpp () = [
 (*****************************************************************************)
 let std_envir = ref (Filename.concat !path "config/envos/environment_splint.h")
 
-let cmdline_flags_envfile () = 
+let cmdline_flags_envfile () =
   [
-    "-env_file", Arg.Set_string std_envir,
+    "--env-file", Arg.Set_string std_envir,
     " <file> (default=" ^ !std_envir ^ ")";
   ]
 
@@ -85,24 +85,24 @@ let pretty_print_typedef_value = ref false
 let show_flow_labels = ref true
 
 
-let cmdline_flags_verbose () = 
+let cmdline_flags_verbose () =
   [
-    "-no_verbose_parsing", Arg.Clear verbose_parsing , "  ";
-    "-no_verbose_lexing", Arg.Clear verbose_lexing , "  ";
-    "-no_verbose_annotater", Arg.Clear verbose_annotater , "  ";
-
-    "-no_parse_error_msg", Arg.Clear verbose_parsing, " ";
-    "-no_type_error_msg",  Arg.Clear verbose_type, " ";
-    
-    
-    "-filter_msg",      Arg.Set  filter_msg , 
+    "--no-verbose-parsing", Arg.Clear verbose_parsing , "  ";
+    "--no-verbose-lexing", Arg.Clear verbose_lexing , "  ";
+    "--no-verbose-annotater", Arg.Clear verbose_annotater , "  ";
+
+    "--no-parse-error-msg", Arg.Clear verbose_parsing, " ";
+    "--no-type-error-msg",  Arg.Clear verbose_type, " ";
+
+
+    "--filter-msg",      Arg.Set  filter_msg ,
     "  filter some cpp message when the macro is a \"known\" cpp construct";
-    "-filter_msg_define_error",Arg.Set filter_msg_define_error,
+    "--filter-msg-define-error",Arg.Set filter_msg_define_error,
     "  filter the error msg";
 
-    "-filter_define_error",Arg.Set filter_define_error,
+    "--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,"  ";
+    "--filter-passed-level",Arg.Set_int filter_passed_level,"  ";
   ]
 
 
@@ -122,15 +122,15 @@ let debug_unparsing = ref false
 let debug_cfg = ref false
 
 (*   "debug C parsing/unparsing", "" *)
-let cmdline_flags_debugging () = 
+let cmdline_flags_debugging () =
   [
-  "-debug_cpp",          Arg.Set  debug_cpp, " ";
-  "-debug_lexer",        Arg.Set  debug_lexer , " ";
-  "-debug_etdt",         Arg.Set  debug_etdt , "  ";
-  "-debug_typedef",      Arg.Set  debug_typedef, "  ";
+  "--debug-cpp",          Arg.Set  debug_cpp, " ";
+  "--debug-lexer",        Arg.Set  debug_lexer , " ";
+  "--debug-etdt",         Arg.Set  debug_etdt , "  ";
+  "--debug-typedef",      Arg.Set  debug_typedef, "  ";
 
-  "-debug_cfg",          Arg.Set debug_cfg , "  ";
-  "-debug_unparsing",      Arg.Set  debug_unparsing, "  ";
+  "--debug-cfg",          Arg.Set debug_cfg , "  ";
+  "--debug-unparsing",      Arg.Set  debug_unparsing, "  ";
   ]
 
 (*****************************************************************************)
@@ -138,10 +138,10 @@ let cmdline_flags_debugging () =
 (*****************************************************************************)
 
 let check_annotater = ref true
-let cmdline_flags_checks () = 
+let cmdline_flags_checks () =
   [
-  "-disable_check_annotater",          Arg.Clear  check_annotater, " ";
-  "-enable_check_annotater",          Arg.Set  check_annotater, " ";
+  "--disable-check-annotater",          Arg.Clear  check_annotater, " ";
+  "--enable-check-annotater",          Arg.Set  check_annotater, " ";
   ]
 
 (*****************************************************************************)
@@ -153,7 +153,7 @@ let label_strategy_2 = ref false
 
 let cmdline_flags_algos () =
   [
-    "-l1",                Arg.Clear label_strategy_2, " ";
+    "--l1",                Arg.Clear label_strategy_2, " ";
   ]
 
 (*****************************************************************************)
@@ -161,7 +161,7 @@ let cmdline_flags_algos () =
 (*****************************************************************************)
 
 let cpp_directive_passing = ref false
-let ifdef_directive_passing = ref false 
+let ifdef_directive_passing = ref false
 
 let disable_multi_pass = ref false
 let disable_add_typedef = ref false
@@ -169,19 +169,24 @@ let disable_add_typedef = ref false
 let if0_passing = ref true
 let add_typedef_root = ref true
 
+(* defined and undefined constants *)
+let add c s = c := (Str.split (Str.regexp ",") s) @ !c
+let defined = ref ([] : string list)
+let undefined = ref ([] : string list)
+
 let cmdline_flags_parsing_algos () = [
 
-    "-directive_passing",              Arg.Set cpp_directive_passing, 
+    "--directive-passing",              Arg.Set cpp_directive_passing,
     "   pass most cpp directives, especially when inside function";
-    "-ifdef_passing",              Arg.Set ifdef_directive_passing, 
+    "--ifdef-passing",              Arg.Set ifdef_directive_passing,
     "   pass ifdef directives ";
 
-    "-noif0_passing",   Arg.Clear if0_passing, 
+    "--noif0-passing",   Arg.Clear if0_passing,
     " ";
-    "-noadd_typedef_root",   Arg.Clear add_typedef_root, " ";
-    "-noadd_typedef",   Arg.Set disable_add_typedef, " ";
+    "--noadd-typedef-root",   Arg.Clear add_typedef_root, " ";
+    "--noadd-typedef",   Arg.Set disable_add_typedef, " ";
 
-    "-disable_multi_pass", Arg.Set disable_multi_pass, " ";
+    "--disable-multi-pass", Arg.Set disable_multi_pass, " ";
 ]
 
 (*****************************************************************************)
@@ -193,13 +198,15 @@ let diff_lines = ref (None : string option) (* number of lines of context *)
 
 (* for parse_c *)
 let use_cache = ref false
+let cache_prefix = ref (None : string option)
+let cache_limit = ref (None : int option)
 
-let cmdline_flags_other () = 
+let cmdline_flags_other () =
   [
-    "-U", Arg.Int (fun n -> diff_lines := Some (Common.i_to_s n)), 
+    "-U", Arg.Int (fun n -> diff_lines := Some (Common.i_to_s n)),
     "  set number of diff context lines";
-    
-    "-use_cache", Arg.Set use_cache, 
+
+    "--use-cache", Arg.Set use_cache,
     "   use .ast_raw pre-parsed cached C file";
   ]
 
@@ -249,4 +256,13 @@ let spacing = ref LINUX
 let set_linux_spacing _ = spacing := LINUX (*follow the conventions of Linux*)
 let set_smpl_spacing _ = spacing := SMPL   (*use spacing from the SP*)
 
+let max_width = 78
+
 (*****************************************************************************)
+
+(* drop back edges made by proper loop constructs -
+   unsafe but more efficient *)
+let no_loops = ref false
+let no_gotos = ref false
+
+let keep_comments = ref false (* unparsing *)