For the following case: [const_vol] <type> [ptr] <identifier> <annotation> <semicolon|eq>
The lookahead function in Parsing_hacks would mislabel <identifier> as a CppDirective. Add cases in the lookahead function for handling this case. Signed-off-by: Jaskaran Singh <[email protected]> --- parsing_c/parsing_hacks.ml | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/parsing_c/parsing_hacks.ml b/parsing_c/parsing_hacks.ml index 56857f3c..43421647 100644 --- a/parsing_c/parsing_hacks.ml +++ b/parsing_c/parsing_hacks.ml @@ -1887,6 +1887,11 @@ let not_struct_enum = function (Parser_c.Tstruct _ | Parser_c.Tunion _ | Parser_c.Tenum _)::_ -> false | _ -> true +let is_struct_enum = function + | (Parser_c.TIdent _):: + (Parser_c.Tstruct _ | Parser_c.Tunion _ | Parser_c.Tenum _)::_ -> true + | _ -> false + let not_opar = function TOPar _ -> false | _ -> true @@ -2061,6 +2066,32 @@ let lookahead2 ~pass next before = && is_type type_ -> TCommentCpp (Token_c.CppDirective, i1) + (* tt xx yy; : yy is an annot *) + | (TIdent (s, i1)::(TPtVirg _|TEq _)::_, TIdent (s2, i2)::type_::rest) + when (is_struct_enum (type_::rest) + || is_type type_) + && s ==~ regexp_annot -> + TCommentCpp (Token_c.CppMacro, i1) + + (* tt * xx yy; : yy is an annot *) + | (TIdent (s, i1)::(TPtVirg _|TEq _)::_, TIdent (s2, i2)::ptr) + when pointer ptr + && s ==~ regexp_annot -> + TCommentCpp (Token_c.CppMacro, i1) + + (* tt xx yy; : yy is an annot, so xx is an ident *) + | (TIdent (s, i1)::TIdent (s2, i2)::(TPtVirg _|TEq _)::_, seen::_) + when (is_struct_enum before + || is_type seen) + && s2 ==~ regexp_annot -> + TIdent (s, i1) + + (* tt * xx yy; : yy is an annot, so xx is an ident *) + | (TIdent (s, i1)::TIdent (s2, i2)::(TPtVirg _|TEq _)::_, ptr) + when pointer ptr + && s2 ==~ regexp_annot -> + TIdent (s, i1) + (* tt xx yy *) | (TIdent (s, i1)::TIdent (s2, i2)::_ , seen::_) when not_struct_enum before -- 2.21.1 _______________________________________________ Cocci mailing list [email protected] https://systeme.lip6.fr/mailman/listinfo/cocci
