+ (* christia *)
+ (* xx const tt *)
+ | (TIdent (s, i1)::(Tconst _|Tvolatile _|Trestrict _)::type_::_ , _) when not_struct_enum before
+ && is_type type_
+ ->
+
+ TCommentCpp (Token_c.CppDirective, i1)
+
+ (* xx struct *)
+ | (TIdent (s, i1)::Tstruct _::_ , _) when not_struct_enum before
+ ->
+ TCommentCpp (Token_c.CppDirective, i1)
+
+ (* xx tt *)
+ | (TIdent (s, i1)::type_::_ , _) when not_struct_enum before
+ && is_type type_
+ ->
+ TCommentCpp (Token_c.CppDirective, i1)
+
+ (* tt xx yy *)
+ | (TIdent (s, i1)::TIdent (s2, i2)::_ , seen::_) when not_struct_enum before
+ && is_type seen
+ ->
+ if is_macro s2 then
+ TIdent (s, i1)
+ else
+ TCommentCpp (Token_c.CppDirective, i1)
+
+ | (TIdent (s2, i2)::_ , TIdent (s, i1)::seen::_) when not_struct_enum before
+ && is_macro s2 && is_type seen
+ ->
+ TCommentCpp (Token_c.CppDirective, i2)
+
+ (* tt xx * *)
+ | (TIdent (s, i1)::ptr::_ , seen::_) when not_struct_enum before
+ && pointer ptr && is_type seen
+ ->
+ TCommentCpp (Token_c.CppDirective, i1)
+
+ (* tt * xx yy *)
+ | (TIdent (s, i1)::TIdent(s2, i2)::_ , ptr::_) when not_struct_enum before
+ && pointer ptr
+ ->
+ if is_macro s2 then
+ TIdent (s, i1)
+ else
+ TCommentCpp (Token_c.CppDirective, i1)
+
+ (* tt * xx yy *)
+ | (TIdent(s2, i2)::_ , TIdent (s, i1)::ptr::_) when not_struct_enum before
+ && is_macro s2 && pointer ptr
+ ->
+ TCommentCpp (Token_c.CppDirective, i2)
+
+ (* exception to next rule *)
+ | (TIdent(s2, i2)::TOPar _ :: _ , TIdent(s, i1)::seen::_) when not_struct_enum before
+ && is_macro s2 && is_type seen
+ ->
+ TIdent(s2, i2)
+ (* tt xx yy *)
+ | (TIdent(s2, i2)::_ , TIdent(s, i1)::seen::_) when not_struct_enum before
+ && is_macro s2 && is_type seen
+ ->
+ TCommentCpp (Token_c.CppDirective, i2)
+
+ (* xx * yy AND in paramdecl *)
+ | (TIdent (s, i1)::ptr::TIdent (s2, i2)::_ , _)
+ when not_struct_enum before && (LP.current_context() =*= LP.InParameter)
+ && pointer ptr && ok_typedef s
+ ->
+
+ msg_typedef s i1 14; LP.add_typedef_root s;
+ TypedefIdent (s, i1)
+
+ (* xx yy ( *)
+ | (TIdent (s, i1)::TIdent (s2, i2)::TOPar _::_ , _) when not_struct_enum before
+ && ok_typedef s && is_macro s2
+ ->
+ TIdent (s, i1)