split decl to allow functors as arg
[m6w6/ext-psi] / src / parser_proc_def.h
1
2 TOKEN_TYPE(decl_enum, struct psi_decl_enum *)
3 TOKEN_DTOR(decl_enum, psi_decl_enum_free(&$$);)
4 TOKEN_TYPE(decl_enum_items, struct psi_plist*)
5 TOKEN_DTOR(decl_enum_items, psi_plist_free($$);)
6 TOKEN_TYPE(decl_enum_item, struct psi_decl_enum_item*)
7 TOKEN_DTOR(decl_enum_item, psi_decl_enum_item_free(&$$);)
8 TOKEN_TYPE(decl_struct_args_block, struct psi_plist*)
9 TOKEN_DTOR(decl_struct_args_block, psi_plist_free($$);) /* there was a typo */
10 TOKEN_TYPE(decl_struct_args, struct psi_plist*)
11 TOKEN_DTOR(decl_struct_args, psi_plist_free($$);)
12 TOKEN_TYPE(decl_struct, struct psi_decl_struct*)
13 TOKEN_DTOR(decl_struct, psi_decl_struct_free(&$$);)
14 TOKEN_TYPE(align_and_size, struct psi_layout)
15 TOKEN_TYPE(decl_union, struct psi_decl_union*)
16 TOKEN_DTOR(decl_union, psi_decl_union_free(&$$);)
17 TOKEN_TYPE(const_type, struct psi_const_type*)
18 TOKEN_DTOR(const_type, psi_const_type_free(&$$);)
19 TOKEN_TYPE(constant, struct psi_const*)
20 TOKEN_DTOR(constant, psi_const_free(&$$);)
21 TOKEN_TYPE(decl_typedef, struct psi_decl_arg*)
22 TOKEN_DTOR(decl_typedef, psi_decl_arg_free(&$$);)
23 TOKEN_TYPE(decl_typedef_body_ex, struct psi_decl_arg*)
24 TOKEN_DTOR(decl_typedef_body_ex, psi_decl_arg_free(&$$);)
25 TOKEN_TYPE(decl_typedef_body, struct psi_decl_arg*)
26 TOKEN_DTOR(decl_typedef_body, psi_decl_arg_free(&$$);)
27 TOKEN_TYPE(decl_typedef_body_fn_args, struct psi_plist*)
28 TOKEN_DTOR(decl_typedef_body_fn_args, psi_plist_free($$);)
29 TOKEN_TYPE(decl, struct psi_decl*)
30 TOKEN_DTOR(decl, psi_decl_free(&$$);)
31 TOKEN_TYPE(decl_func, struct psi_decl_arg*)
32 TOKEN_DTOR(decl_func, psi_decl_arg_free(&$$);)
33 TOKEN_TYPE(decl_abi, struct psi_decl_abi*)
34 TOKEN_DTOR(decl_abi, psi_decl_abi_free(&$$);)
35 TOKEN_TYPE(decl_var, struct psi_decl_var*)
36 TOKEN_DTOR(decl_var, psi_decl_var_free(&$$);)
37 TOKEN_TYPE(decl_vars, struct psi_plist*)
38 TOKEN_DTOR(decl_vars, psi_plist_free($$);)
39 TOKEN_TYPE(decl_arg, struct psi_decl_arg*)
40 TOKEN_DTOR(decl_arg, psi_decl_arg_free(&$$);)
41 TOKEN_TYPE(decl_args, struct psi_plist*)
42 TOKEN_DTOR(decl_args, psi_plist_free($$);)
43 TOKEN_TYPE(struct_args, struct psi_plist*)
44 TOKEN_DTOR(struct_args, psi_plist_free($$);)
45 TOKEN_TYPE(struct_arg, struct psi_decl_arg*)
46 TOKEN_DTOR(struct_arg, psi_decl_arg_free(&$$);)
47 TOKEN_TYPE(decl_layout, struct psi_layout*)
48 TOKEN_DTOR(decl_layout, psi_layout_free(&$$);)
49 TOKEN_TYPE(decl_type, struct psi_decl_type*)
50 TOKEN_DTOR(decl_type, psi_decl_type_free(&$$);)
51 TOKEN_TYPE(const_decl_type, struct psi_decl_type*)
52 TOKEN_DTOR(const_decl_type, psi_decl_type_free(&$$);)
53 TOKEN_TYPE(impl, struct psi_impl*)
54 TOKEN_DTOR(impl, psi_impl_free(&$$);)
55 TOKEN_TYPE(impl_func, struct psi_impl_func*)
56 TOKEN_DTOR(impl_func, psi_impl_func_free(&$$);)
57 TOKEN_TYPE(impl_def_val, struct psi_impl_def_val*)
58 TOKEN_DTOR(impl_def_val, psi_impl_def_val_free(&$$);)
59 TOKEN_TYPE(impl_var, struct psi_impl_var*)
60 TOKEN_DTOR(impl_var, psi_impl_var_free(&$$);)
61 TOKEN_TYPE(impl_arg, struct psi_impl_arg*)
62 TOKEN_DTOR(impl_arg, psi_impl_arg_free(&$$);)
63 TOKEN_TYPE(impl_args, struct psi_plist*)
64 TOKEN_DTOR(impl_args, psi_plist_free($$);)
65 TOKEN_TYPE(impl_vararg, struct psi_impl_arg*)
66 TOKEN_DTOR(impl_vararg, psi_impl_arg_free(&$$);)
67 TOKEN_TYPE(impl_stmts, struct psi_plist*)
68 TOKEN_DTOR(impl_stmts, psi_plist_free($$);)
69 TOKEN_TYPE(impl_stmt, struct psi_token**)
70 TOKEN_DTOR(impl_stmt, psi_impl_stmt_free(&$$);)
71 TOKEN_TYPE(number, struct psi_number*)
72 TOKEN_DTOR(number, psi_number_free(&$$);)
73 TOKEN_TYPE(num_exp, struct psi_num_exp*)
74 TOKEN_DTOR(num_exp, psi_num_exp_free(&$$);)
75 TOKEN_TYPE(let_stmt, struct psi_let_stmt*)
76 TOKEN_DTOR(let_stmt, psi_let_stmt_free(&$$);)
77 TOKEN_TYPE(let_calloc, struct psi_let_calloc*)
78 TOKEN_DTOR(let_calloc, psi_let_calloc_free(&$$);)
79 TOKEN_TYPE(let_func, struct psi_let_func*)
80 TOKEN_DTOR(let_func, psi_let_func_free(&$$);)
81 TOKEN_TYPE(callback_arg_list, struct psi_plist *)
82 TOKEN_DTOR(callback_arg_list, psi_plist_free($$);)
83 TOKEN_TYPE(callback_args, struct psi_plist *)
84 TOKEN_DTOR(callback_args, psi_plist_free($$);)
85 TOKEN_TYPE(let_callback, struct psi_let_callback*)
86 TOKEN_DTOR(let_callback, psi_let_callback_free(&$$);)
87 TOKEN_TYPE(let_exp, struct psi_let_exp*)
88 TOKEN_DTOR(let_exp, psi_let_exp_free(&$$);)
89 TOKEN_TYPE(let_exps, struct psi_plist*)
90 TOKEN_DTOR(let_exps, psi_plist_free($$);)
91 TOKEN_TYPE(assert_stmt, struct psi_assert_stmt*)
92 TOKEN_DTOR(assert_stmt, psi_assert_stmt_free(&$$);)
93 TOKEN_TYPE(set_stmt, struct psi_set_stmt*)
94 TOKEN_DTOR(set_stmt, psi_set_stmt_free(&$$);)
95 TOKEN_TYPE(set_exp, struct psi_set_exp*)
96 TOKEN_DTOR(set_exp, psi_set_exp_free(&$$);)
97 TOKEN_TYPE(set_exps, struct psi_plist*)
98 TOKEN_DTOR(set_exps, psi_plist_free($$);)
99 TOKEN_TYPE(set_func, struct psi_set_func*)
100 TOKEN_DTOR(set_func, psi_set_func_free(&$$);)
101 TOKEN_TYPE(return_stmt, struct psi_return_stmt*)
102 TOKEN_DTOR(return_stmt, psi_return_stmt_free(&$$);)
103 TOKEN_TYPE(free_stmt, struct psi_free_stmt*)
104 TOKEN_DTOR(free_stmt, psi_free_stmt_free(&$$);)
105 TOKEN_TYPE(free_exps, struct psi_plist*)
106 TOKEN_DTOR(free_exps, psi_plist_free($$);)
107 TOKEN_TYPE(free_exp, struct psi_free_exp*)
108 TOKEN_DTOR(free_exp, psi_free_exp_free(&$$);)
109 TOKEN_TYPE(impl_type, struct psi_impl_type*)
110 TOKEN_DTOR(impl_type, psi_impl_type_free(&$$);)
111 TOKEN_TYPE(cpp_exp, struct psi_cpp_exp*)
112 TOKEN_DTOR(cpp_exp, psi_cpp_exp_free(&$$);)
113 TOKEN_TYPE(cpp_macro_decl, struct psi_cpp_macro_decl*)
114 TOKEN_DTOR(cpp_macro_decl, psi_cpp_macro_decl_free(&$$);)
115 TOKEN_TYPE(cpp_macro_decl_tokens, struct psi_plist*)
116 TOKEN_DTOR(cpp_macro_decl_tokens, psi_plist_free($$);)
117 TOKEN_TYPE(cpp_macro_exp, struct psi_num_exp*)
118 TOKEN_DTOR(cpp_macro_exp, psi_num_exp_free(&$$);)
119 TOKEN_TYPE(cpp_macro_sig, struct psi_plist*)
120 TOKEN_DTOR(cpp_macro_sig, psi_plist_free($$);)
121 TOKEN_TYPE(cpp_macro_sig_args, struct psi_plist*)
122 TOKEN_DTOR(cpp_macro_sig_args, psi_plist_free($$);)
123 TOKEN_TYPE(cpp_macro_call, struct psi_plist*)
124 TOKEN_DTOR(cpp_macro_call, psi_plist_free($$);)
125 TOKEN_TYPE(cpp_macro_call_args, struct psi_plist*)
126 TOKEN_DTOR(cpp_macro_call_args, psi_plist_free($$);)
127
128 TOKEN_TYPE(reference, bool)
129 TOKEN_TYPE(indirection, unsigned)
130 TOKEN_TYPE(pointers, unsigned)
131
132
133 PARSE(block, TYPED(impl, impl)) {
134 if (!P->impls) {
135 P->impls = psi_plist_init((psi_plist_dtor) psi_impl_free);
136 }
137 P->impls = psi_plist_add(P->impls, &impl);
138 }
139
140
141
142 /*
143 * decl_vars: decl_var
144 */
145 PARSE_TYPED(decl_vars, vars,
146 TYPED(decl_var, var)) {
147 vars = psi_plist_add(psi_plist_init((psi_plist_dtor) psi_decl_var_free),
148 &var);
149 }
150
151 /*
152 * decl_vars: decl_vars , decl_var
153 */
154 PARSE_TYPED(decl_vars, vars,
155 TYPED(decl_vars, vars_)
156 TOKEN(COMMA)
157 TYPED(decl_var, var)) {
158 vars = psi_plist_add(vars_, &var);
159 }
160
161
162