TOKEN_TYPE(decl_enum, struct psi_decl_enum *) TOKEN_DTOR(decl_enum, psi_decl_enum_free(&$$);) TOKEN_TYPE(decl_enum_items, struct psi_plist*) TOKEN_DTOR(decl_enum_items, psi_plist_free($$);) TOKEN_TYPE(decl_enum_item, struct psi_decl_enum_item*) TOKEN_DTOR(decl_enum_item, psi_decl_enum_item_free(&$$);) TOKEN_TYPE(decl_struct_args_block, struct psi_plist*) TOKEN_DTOR(decl_struct_args_block, psi_plist_free($$);) /* there was a typo */ TOKEN_TYPE(decl_struct_args, struct psi_plist*) TOKEN_DTOR(decl_struct_args, psi_plist_free($$);) TOKEN_TYPE(decl_struct, struct psi_decl_struct*) TOKEN_DTOR(decl_struct, psi_decl_struct_free(&$$);) TOKEN_TYPE(align_and_size, struct psi_layout) TOKEN_TYPE(decl_union, struct psi_decl_union*) TOKEN_DTOR(decl_union, psi_decl_union_free(&$$);) TOKEN_TYPE(const_type, struct psi_const_type*) TOKEN_DTOR(const_type, psi_const_type_free(&$$);) TOKEN_TYPE(constant, struct psi_const*) TOKEN_DTOR(constant, psi_const_free(&$$);) TOKEN_TYPE(decl_typedef, struct psi_decl_arg*) TOKEN_DTOR(decl_typedef, psi_decl_arg_free(&$$);) TOKEN_TYPE(decl_typedef_body_ex, struct psi_decl_arg*) TOKEN_DTOR(decl_typedef_body_ex, psi_decl_arg_free(&$$);) TOKEN_TYPE(decl_typedef_body, struct psi_decl_arg*) TOKEN_DTOR(decl_typedef_body, psi_decl_arg_free(&$$);) TOKEN_TYPE(decl_typedef_body_fn_args, struct psi_plist*) TOKEN_DTOR(decl_typedef_body_fn_args, psi_plist_free($$);) TOKEN_TYPE(decl, struct psi_decl*) TOKEN_DTOR(decl, psi_decl_free(&$$);) TOKEN_TYPE(decl_func, struct psi_decl_arg*) TOKEN_DTOR(decl_func, psi_decl_arg_free(&$$);) TOKEN_TYPE(decl_abi, struct psi_decl_abi*) TOKEN_DTOR(decl_abi, psi_decl_abi_free(&$$);) TOKEN_TYPE(decl_var, struct psi_decl_var*) TOKEN_DTOR(decl_var, psi_decl_var_free(&$$);) TOKEN_TYPE(decl_vars, struct psi_plist*) TOKEN_DTOR(decl_vars, psi_plist_free($$);) TOKEN_TYPE(decl_arg, struct psi_decl_arg*) TOKEN_DTOR(decl_arg, psi_decl_arg_free(&$$);) TOKEN_TYPE(decl_args, struct psi_plist*) TOKEN_DTOR(decl_args, psi_plist_free($$);) TOKEN_TYPE(struct_args, struct psi_plist*) TOKEN_DTOR(struct_args, psi_plist_free($$);) TOKEN_TYPE(struct_arg, struct psi_decl_arg*) TOKEN_DTOR(struct_arg, psi_decl_arg_free(&$$);) TOKEN_TYPE(decl_layout, struct psi_layout*) TOKEN_DTOR(decl_layout, psi_layout_free(&$$);) TOKEN_TYPE(decl_type, struct psi_decl_type*) TOKEN_DTOR(decl_type, psi_decl_type_free(&$$);) TOKEN_TYPE(const_decl_type, struct psi_decl_type*) TOKEN_DTOR(const_decl_type, psi_decl_type_free(&$$);) TOKEN_TYPE(impl, struct psi_impl*) TOKEN_DTOR(impl, psi_impl_free(&$$);) TOKEN_TYPE(impl_func, struct psi_impl_func*) TOKEN_DTOR(impl_func, psi_impl_func_free(&$$);) TOKEN_TYPE(impl_def_val, struct psi_impl_def_val*) TOKEN_DTOR(impl_def_val, psi_impl_def_val_free(&$$);) TOKEN_TYPE(impl_var, struct psi_impl_var*) TOKEN_DTOR(impl_var, psi_impl_var_free(&$$);) TOKEN_TYPE(impl_arg, struct psi_impl_arg*) TOKEN_DTOR(impl_arg, psi_impl_arg_free(&$$);) TOKEN_TYPE(impl_args, struct psi_plist*) TOKEN_DTOR(impl_args, psi_plist_free($$);) TOKEN_TYPE(impl_vararg, struct psi_impl_arg*) TOKEN_DTOR(impl_vararg, psi_impl_arg_free(&$$);) TOKEN_TYPE(impl_stmts, struct psi_plist*) TOKEN_DTOR(impl_stmts, psi_plist_free($$);) TOKEN_TYPE(impl_stmt, struct psi_token**) TOKEN_DTOR(impl_stmt, psi_impl_stmt_free(&$$);) TOKEN_TYPE(number, struct psi_number*) TOKEN_DTOR(number, psi_number_free(&$$);) TOKEN_TYPE(num_exp, struct psi_num_exp*) TOKEN_DTOR(num_exp, psi_num_exp_free(&$$);) TOKEN_TYPE(let_stmt, struct psi_let_stmt*) TOKEN_DTOR(let_stmt, psi_let_stmt_free(&$$);) TOKEN_TYPE(let_calloc, struct psi_let_calloc*) TOKEN_DTOR(let_calloc, psi_let_calloc_free(&$$);) TOKEN_TYPE(let_func, struct psi_let_func*) TOKEN_DTOR(let_func, psi_let_func_free(&$$);) TOKEN_TYPE(callback_arg_list, struct psi_plist *) TOKEN_DTOR(callback_arg_list, psi_plist_free($$);) TOKEN_TYPE(callback_args, struct psi_plist *) TOKEN_DTOR(callback_args, psi_plist_free($$);) TOKEN_TYPE(let_callback, struct psi_let_callback*) TOKEN_DTOR(let_callback, psi_let_callback_free(&$$);) TOKEN_TYPE(let_exp, struct psi_let_exp*) TOKEN_DTOR(let_exp, psi_let_exp_free(&$$);) TOKEN_TYPE(let_exps, struct psi_plist*) TOKEN_DTOR(let_exps, psi_plist_free($$);) TOKEN_TYPE(assert_stmt, struct psi_assert_stmt*) TOKEN_DTOR(assert_stmt, psi_assert_stmt_free(&$$);) TOKEN_TYPE(set_stmt, struct psi_set_stmt*) TOKEN_DTOR(set_stmt, psi_set_stmt_free(&$$);) TOKEN_TYPE(set_exp, struct psi_set_exp*) TOKEN_DTOR(set_exp, psi_set_exp_free(&$$);) TOKEN_TYPE(set_exps, struct psi_plist*) TOKEN_DTOR(set_exps, psi_plist_free($$);) TOKEN_TYPE(set_func, struct psi_set_func*) TOKEN_DTOR(set_func, psi_set_func_free(&$$);) TOKEN_TYPE(return_stmt, struct psi_return_stmt*) TOKEN_DTOR(return_stmt, psi_return_stmt_free(&$$);) TOKEN_TYPE(free_stmt, struct psi_free_stmt*) TOKEN_DTOR(free_stmt, psi_free_stmt_free(&$$);) TOKEN_TYPE(free_exps, struct psi_plist*) TOKEN_DTOR(free_exps, psi_plist_free($$);) TOKEN_TYPE(free_exp, struct psi_free_exp*) TOKEN_DTOR(free_exp, psi_free_exp_free(&$$);) TOKEN_TYPE(impl_type, struct psi_impl_type*) TOKEN_DTOR(impl_type, psi_impl_type_free(&$$);) TOKEN_TYPE(cpp_exp, struct psi_cpp_exp*) TOKEN_DTOR(cpp_exp, psi_cpp_exp_free(&$$);) TOKEN_TYPE(cpp_macro_decl, struct psi_cpp_macro_decl*) TOKEN_DTOR(cpp_macro_decl, psi_cpp_macro_decl_free(&$$);) TOKEN_TYPE(cpp_macro_decl_tokens, struct psi_plist*) TOKEN_DTOR(cpp_macro_decl_tokens, psi_plist_free($$);) TOKEN_TYPE(cpp_macro_exp, struct psi_num_exp*) TOKEN_DTOR(cpp_macro_exp, psi_num_exp_free(&$$);) TOKEN_TYPE(cpp_macro_sig, struct psi_plist*) TOKEN_DTOR(cpp_macro_sig, psi_plist_free($$);) TOKEN_TYPE(cpp_macro_sig_args, struct psi_plist*) TOKEN_DTOR(cpp_macro_sig_args, psi_plist_free($$);) TOKEN_TYPE(cpp_macro_call, struct psi_plist*) TOKEN_DTOR(cpp_macro_call, psi_plist_free($$);) TOKEN_TYPE(cpp_macro_call_args, struct psi_plist*) TOKEN_DTOR(cpp_macro_call_args, psi_plist_free($$);) TOKEN_TYPE(reference, bool) TOKEN_TYPE(indirection, unsigned) TOKEN_TYPE(pointers, unsigned) PARSE(block, TYPED(impl, impl)) { if (!P->impls) { P->impls = psi_plist_init((psi_plist_dtor) psi_impl_free); } P->impls = psi_plist_add(P->impls, &impl); } /* * decl_vars: decl_var */ PARSE_TYPED(decl_vars, vars, TYPED(decl_var, var)) { vars = psi_plist_add(psi_plist_init((psi_plist_dtor) psi_decl_var_free), &var); } /* * decl_vars: decl_vars , decl_var */ PARSE_TYPED(decl_vars, vars, TYPED(decl_vars, vars_) TOKEN(COMMA) TYPED(decl_var, var)) { vars = psi_plist_add(vars_, &var); }