}
P->enums = psi_plist_add(P->enums, &e);
}
-static inline void psi_parser_proc_add_from_typedef(struct psi_parser *P, struct psi_decl_arg *def)
-{
- if (def->type->real.def) {
- switch (def->type->type) {
- case PSI_T_STRUCT:
- psi_parser_proc_add_struct(P, def->type->real.strct);
- break;
- case PSI_T_UNION:
- psi_parser_proc_add_union(P, def->type->real.unn);
- break;
- case PSI_T_ENUM:
- psi_parser_proc_add_enum(P, def->type->real.enm);
- break;
- default:
- break;
- }
- }
-}
static inline void psi_parser_proc_add_typedef(struct psi_parser *P, struct psi_decl_arg *def)
{
assert(def);
%empty {
$sig = psi_plist_init(NULL);
}
+| ELLIPSIS {
+ $sig = psi_plist_init(NULL); /* FIXME */
+}
| cpp_macro_sig_args
+| cpp_macro_sig_args[args] COMMA ELLIPSIS {
+ $sig = $args;
+}
;
cpp_macro_sig_args[args]:
TYPEDEF typedef[def_] EOS {
$def = $def_;
}
+| TYPEDEF VOID name_token EOS {
+ $def = psi_decl_arg_init(
+ psi_decl_type_init(PSI_T_VOID, $VOID->text),
+ psi_decl_var_init($name_token->text, 0, 0)
+ );
+ $def->token = psi_token_copy($VOID);
+ $def->type->token = psi_token_copy($VOID);
+ $def->var->token = psi_token_copy($name_token);
+}
| CPP_EXTENSION TYPEDEF typedef[def_] EOS {
$def = $def_;
}
%empty {
$as = 0;
}
+| LBRACKET RBRACKET {
+ $as = 0;
+}
| LBRACKET NUMBER RBRACKET {
$as = atol($NUMBER->text);
}
;
asterisks[a]:
- ASTERISK {
+ asterisk {
$a = 1;
}
-| asterisks[a_] ASTERISK {
+| asterisks[a_] asterisk {
$a = $a_ + 1;
}
;
+asterisk:
+ ASTERISK
+| ASTERISK CONST
+;
+
/*
*
* impl