X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-psi;a=blobdiff_plain;f=src%2Fparser_proc_grammar.y;h=6fa4ab0bfb9ace332bb39f08688661e81217123a;hp=7f76e4f7c1c92fe431e8ceb60a5868c5d1efd215;hb=79dffa25e63ac38244a7425b02e58aaf0c631624;hpb=35ae2559447092572209f8b237460ceb551293ff diff --git a/src/parser_proc_grammar.y b/src/parser_proc_grammar.y index 7f76e4f..6fa4ab0 100644 --- a/src/parser_proc_grammar.y +++ b/src/parser_proc_grammar.y @@ -5,9 +5,13 @@ %code { #include #include +#include + +#include "php_psi.h" #include "plist.h" #include "parser.h" + #define YYDEBUG 1 #define PSI_PARSER_PROC_DEBUG 1 @@ -55,7 +59,18 @@ static inline void psi_parser_proc_add_const(struct psi_parser *P, struct psi_co } static inline void psi_parser_proc_add_decl(struct psi_parser *P, struct psi_decl *decl) { + char *blacklisted; + size_t i = 0; + assert(decl); + + while (psi_plist_get(PSI_G(blacklist).decls, i++, &blacklisted)) { + if (!fnmatch(blacklisted, decl->func->var->name, 0)) { + psi_decl_free(&decl); + return; + } + } + if (!P->decls) { P->decls = psi_plist_init((psi_plist_dtor) psi_decl_free); } @@ -298,8 +313,8 @@ struct psi_parser; %destructor {psi_decl_free(&$$);} decl_stmt decl decl_body decl_func_body decl_functor_body %type decl_typedef decl_func decl_functor decl_arg decl_anon_arg typedef typedef_decl typedef_anon typedef_anon_decl %destructor {psi_decl_arg_free(&$$);} decl_typedef decl_func decl_functor decl_arg decl_anon_arg typedef typedef_decl typedef_anon typedef_anon_decl -%type decl_var anon_var -%destructor {psi_decl_var_free(&$$);} decl_var anon_var +%type decl_var +%destructor {psi_decl_var_free(&$$);} decl_var %type decl_struct %destructor {psi_decl_struct_free(&$$);} decl_struct %type decl_union @@ -1318,15 +1333,6 @@ decl_var[var]: } ; -anon_var[var]: - %empty { - $var = psi_decl_var_init(NULL, 0, 0); -} -| decl_var { - $var = $decl_var; -} -; - decl_union[union]: UNION name_token align_and_size[as] decl_struct_args[args] { $name_token->type = PSI_T_NAME;