X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-psi;a=blobdiff_plain;f=src%2Fparser_proc_grammar.y;h=bee3cf243eb5379f30039f0e6034977b5781a53c;hp=7f76e4f7c1c92fe431e8ceb60a5868c5d1efd215;hb=4ace6fa9bfa459902184655ee40d6136f25915c8;hpb=5dfa108dda56f36a5af5c83ebcd3e042c6d69a68 diff --git a/src/parser_proc_grammar.y b/src/parser_proc_grammar.y index 7f76e4f..bee3cf2 100644 --- a/src/parser_proc_grammar.y +++ b/src/parser_proc_grammar.y @@ -5,10 +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 static int psi_parser_proc_lex(YYSTYPE *u, struct psi_parser *P, struct psi_plist *tokens, size_t *index); @@ -55,7 +58,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 +312,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 +1332,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;