+decl_extvar_stmt[list]:
+ NAME decl_arg decl_extvar_list[vars] EOS {
+ struct psi_plist *list = psi_plist_init((psi_plist_dtor) psi_decl_extvar_free);
+
+ if ($vars) {
+ size_t i = 0;
+ struct psi_decl_var *var;
+
+ while (psi_plist_get($vars, i++, &var)) {
+ if (psi_decl_extvar_is_blacklisted(var->name)) {
+ psi_decl_var_free(&var);
+ } else {
+ list = psi_plist_add(list, psi_decl_extvar_init(
+ psi_decl_arg_init(psi_decl_type_copy($decl_arg->type), var)));
+ }
+ }
+ free($vars);
+ }
+
+ if (psi_decl_extvar_is_blacklisted($decl_arg->var->name)) {
+ psi_decl_arg_free(&$decl_arg);
+ } else {
+ struct psi_decl_extvar *evar = psi_decl_extvar_init($decl_arg);
+ list = psi_plist_add(list, &evar);
+ }
+
+ $list = list;