permit multiline comments and strings in macros
[bpt/coccinelle.git] / parsing_c / lexer_parser.ml
index e15ad36..1de71da 100644 (file)
@@ -57,7 +57,8 @@ type identkind = TypeDefI | IdentI
 let (_typedef : (string, identkind) Common.scoped_h_env ref) =
   ref (Common.empty_scoped_h_env ())
 
-let is_typedef s  = if !_handle_typedef || !_always_look_typedef then
+let is_typedef s  =
+  if !_handle_typedef || !_always_look_typedef then
   (match (Common.optionise (fun () -> Common.lookup_h_env s !_typedef)) with
   | Some TypeDefI -> true
   | Some IdentI -> false
@@ -68,7 +69,8 @@ let is_typedef s  = if !_handle_typedef || !_always_look_typedef then
 let new_scope() = Common.new_scope_h _typedef
 let del_scope() = Common.del_scope_h _typedef
 
-let add_typedef  s = Common.add_in_scope_h _typedef (s, TypeDefI)
+let add_typedef  s = 
+  Common.add_in_scope_h _typedef (s, TypeDefI)
 let add_ident s    = Common.add_in_scope_h _typedef (s, IdentI)
 
 let add_typedef_root s =
@@ -127,10 +129,11 @@ let pop_context () =
 
 
 
-let lexer_reset_typedef () =
+let lexer_reset_typedef saved_typedefs =
   begin
-  _handle_typedef := true;
-  _typedef := Common.empty_scoped_h_env ();
-  _lexer_hint := (default_hint ());
+    _handle_typedef := true;
+    (match saved_typedefs with
+      None -> _typedef := Common.empty_scoped_h_env ()
+    | Some t -> _typedef := t);
+    _lexer_hint := (default_hint ());
   end
-