Skip to content

Commit 1e3adfa

Browse files
committed
Modify pcc_ast.peg
An argument of a manager pointer is added to the functions below. - pcc_ast_node__destroy() - pcc_ast_node_custom_data__initialize() - pcc_ast_node_custom_data__finalize() - pcc_ast_manager_custom_data__initialize() - pcc_ast_manager_custom_data__finalize()
1 parent bfa0030 commit 1e3adfa

File tree

4 files changed

+49
-47
lines changed

4 files changed

+49
-47
lines changed

README.md

+5-5
Original file line numberDiff line numberDiff line change
@@ -1052,13 +1052,13 @@ EOL <- '\n' / '\r\n' / '\r' / ';'
10521052
%import "code/pcc_ast.peg" # <-- provides AST build functions
10531053
10541054
%%
1055-
void calc_ast_node_custom_data__initialize(calc_ast_node_custom_data_t *obj) { /* <-- must be implemented when enabling node custom data */
1055+
void calc_ast_node_custom_data__initialize(calc_ast_manager_t *mgr, calc_ast_node_custom_data_t *obj) {
10561056
obj->text = NULL;
1057-
}
1057+
} /* <-- must be implemented when enabling node custom data */
10581058
1059-
void calc_ast_node_custom_data__finalize(calc_ast_node_custom_data_t *obj) { /* <-- must be implemented when enabling node custom data */
1059+
void calc_ast_node_custom_data__finalize(calc_ast_manager_t *mgr, calc_ast_node_custom_data_t *obj) {
10601060
free(obj->text);
1061-
}
1061+
} /* <-- must be implemented when enabling node custom data */
10621062
10631063
static void dump_ast(const calc_ast_node_t *obj, int depth) {
10641064
if (obj) {
@@ -1108,7 +1108,7 @@ int main(int argc, char **argv) {
11081108
calc_ast_node_t *ast = NULL;
11091109
while (calc_parse(ctx, &ast)) {
11101110
dump_ast(ast, 0);
1111-
calc_ast_node__destroy(ast);
1111+
calc_ast_node__destroy(&mgr, ast);
11121112
}
11131113
calc_destroy(ctx);
11141114
}

examples/ast-calc.peg

+5-5
Original file line numberDiff line numberDiff line change
@@ -57,13 +57,13 @@ EOL <- '\n' / '\r\n' / '\r' / ';'
5757
%import "code/pcc_ast.peg" # <-- provides AST build functions
5858

5959
%%
60-
void calc_ast_node_custom_data__initialize(calc_ast_node_custom_data_t *obj) { /* <-- must be implemented when enabling node custom data */
60+
void calc_ast_node_custom_data__initialize(calc_ast_manager_t *mgr, calc_ast_node_custom_data_t *obj) {
6161
obj->text = NULL;
62-
}
62+
} /* <-- must be implemented when enabling node custom data */
6363

64-
void calc_ast_node_custom_data__finalize(calc_ast_node_custom_data_t *obj) { /* <-- must be implemented when enabling node custom data */
64+
void calc_ast_node_custom_data__finalize(calc_ast_manager_t *mgr, calc_ast_node_custom_data_t *obj) {
6565
free(obj->text);
66-
}
66+
} /* <-- must be implemented when enabling node custom data */
6767

6868
static void dump_ast(const calc_ast_node_t *obj, int depth) {
6969
if (obj) {
@@ -113,7 +113,7 @@ int main(int argc, char **argv) {
113113
calc_ast_node_t *ast = NULL;
114114
while (calc_parse(ctx, &ast)) {
115115
dump_ast(ast, 0);
116-
calc_ast_node__destroy(ast);
116+
calc_ast_node__destroy(&mgr, ast);
117117
}
118118
calc_destroy(ctx);
119119
}

import/code/README.md

+11-11
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ In this directory, currently one import file that provides utility codes is stor
66

77
## Import File
88

9-
### `code/pcc_ast.peg`
9+
### `code/pcc_ast.peg` (version 2.2.0)
1010

1111
#### Synopsis
1212

@@ -81,7 +81,7 @@ The usage procedure is shown below.
8181
my_ast_node_t *ast = NULL; /* ast: the root node of the AST */
8282
while (my_parse(ctx, &ast)) {
8383
/* ... do something needed here */
84-
my_ast_node__destroy(ast);
84+
my_ast_node__destroy(&mgr, ast);
8585
}
8686
my_destroy(ctx);
8787
}
@@ -134,18 +134,18 @@ The concrete usage procedure is shown below.
134134
rule1 <- < [0-9]+ > { $$ = my_ast_node__create_0(); $$->custom.text = strdup($1); }
135135
```
136136
3. Implement the initialization and finalization functions for the node custom data.
137-
- <code>void <b><i>pcc</i></b>\_ast_node_custom_data__initialize(<b><i>pcc</i></b>\_ast_node_custom_data_t *obj);</code>
137+
- <code>void <b><i>pcc</i></b>\_ast_node_custom_data__initialize(<b><i>pcc</i></b>\_ast_manager_t *mgr, <b><i>pcc</i></b>\_ast_node_custom_data_t *obj);</code>
138138
+ Initializes the node custom data `obj`.
139-
- <code>void <b><i>pcc</i></b>\_ast_node_custom_data__finalize(<b><i>pcc</i></b>\_ast_node_custom_data_t *obj);</code>
139+
- <code>void <b><i>pcc</i></b>\_ast_node_custom_data__finalize(<b><i>pcc</i></b>\_ast_manager_t *mgr, <b><i>pcc</i></b>\_ast_node_custom_data_t *obj);</code>
140140
+ Finalizes the node custom data `obj`.
141141
142142
An example is as follows.
143143
```c
144-
void my_ast_node_custom_data__initialize(my_ast_node_custom_data_t *obj) {
144+
void my_ast_node_custom_data__initialize(my_ast_manager_t *mgr, my_ast_node_custom_data_t *obj) {
145145
obj->text = NULL;
146146
}
147147
148-
void my_ast_node_custom_data__finalize(my_ast_node_custom_data_t *obj) {
148+
void my_ast_node_custom_data__finalize(my_ast_manager_t *mgr, my_ast_node_custom_data_t *obj) {
149149
free(obj->text);
150150
}
151151
```
@@ -247,13 +247,13 @@ EOL <- '\n' / '\r\n' / '\r' / ';'
247247
%import "code/pcc_ast.peg" # <-- provides AST build functions
248248
249249
%%
250-
void calc_ast_node_custom_data__initialize(calc_ast_node_custom_data_t *obj) { /* <-- must be implemented when enabling node custom data */
250+
void calc_ast_node_custom_data__initialize(calc_ast_manager_t *mgr, calc_ast_node_custom_data_t *obj) {
251251
obj->text = NULL;
252-
}
252+
} /* <-- must be implemented when enabling node custom data */
253253
254-
void calc_ast_node_custom_data__finalize(calc_ast_node_custom_data_t *obj) { /* <-- must be implemented when enabling node custom data */
254+
void calc_ast_node_custom_data__finalize(calc_ast_manager_t *mgr, calc_ast_node_custom_data_t *obj) {
255255
free(obj->text);
256-
}
256+
} /* <-- must be implemented when enabling node custom data */
257257
258258
static void dump_ast(const calc_ast_node_t *obj, int depth) {
259259
if (obj) {
@@ -303,7 +303,7 @@ int main(int argc, char **argv) {
303303
calc_ast_node_t *ast = NULL;
304304
while (calc_parse(ctx, &ast)) {
305305
dump_ast(ast, 0);
306-
calc_ast_node__destroy(ast);
306+
calc_ast_node__destroy(&mgr, ast);
307307
}
308308
calc_destroy(ctx);
309309
}

import/code/pcc_ast.peg

+28-26
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Copyright (c) 2024 Arihiro Yoshida. All rights reserved.
1+
# Copyright (c) 2024-2025 Arihiro Yoshida. All rights reserved.
22
#
33
# Permission is hereby granted, free of charge, to any person obtaining a copy
44
# of this software and associated documentation files (the "Software"), to deal
@@ -18,7 +18,9 @@
1818
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
1919
# THE SOFTWARE.
2020

21-
# AST utility import file: version 2.1.0
21+
%common {
22+
/* Using AST utility import file version 2.2.0 */
23+
}
2224

2325
%header {
2426
#ifdef __cplusplus
@@ -106,7 +108,7 @@ ${prefix}_ast_node_t *${prefix}_ast_node__create_binary(${prefix}_ast_manager_t
106108
${prefix}_ast_node_t *${prefix}_ast_node__create_ternary(${prefix}_ast_manager_t *mgr, ${prefix}_ast_range_t range, int label, ${prefix}_ast_node_t *node0, ${prefix}_ast_node_t *node1, ${prefix}_ast_node_t *node2);
107109
${prefix}_ast_node_t *${prefix}_ast_node__create_variadic(${prefix}_ast_manager_t *mgr, ${prefix}_ast_range_t range, int label);
108110
${prefix}_ast_node_t *${prefix}_ast_node__add_child(${prefix}_ast_node_t *obj, ${prefix}_ast_node_t *node); /* for a variadic node only */
109-
void ${prefix}_ast_node__destroy(${prefix}_ast_node_t *obj);
111+
void ${prefix}_ast_node__destroy(${prefix}_ast_manager_t *mgr, ${prefix}_ast_node_t *obj);
110112

111113
#ifndef ${PREFIX}_AST_NODE_STRING_CAPTURING_DISABLED
112114
#define ${prefix}_ast_node__get_string(obj) ((const char *)(obj->string))
@@ -115,19 +117,19 @@ void ${prefix}_ast_node__destroy(${prefix}_ast_node_t *obj);
115117
#endif
116118

117119
#ifdef ${PREFIX}_AST_MANAGER_CUSTOM_DATA_DEFINED
118-
void ${prefix}_ast_manager_custom_data__initialize(${prefix}_ast_manager_custom_data_t *obj);
119-
void ${prefix}_ast_manager_custom_data__finalize(${prefix}_ast_manager_custom_data_t *obj);
120+
void ${prefix}_ast_manager_custom_data__initialize(${prefix}_ast_manager_t *mgr, ${prefix}_ast_manager_custom_data_t *obj);
121+
void ${prefix}_ast_manager_custom_data__finalize(${prefix}_ast_manager_t *mgr, ${prefix}_ast_manager_custom_data_t *obj);
120122
#else
121-
#define ${prefix}_ast_manager_custom_data__initialize(obj) ((void)0)
122-
#define ${prefix}_ast_manager_custom_data__finalize(obj) ((void)0)
123+
#define ${prefix}_ast_manager_custom_data__initialize(mgr, obj) ((void)0)
124+
#define ${prefix}_ast_manager_custom_data__finalize(mgr, obj) ((void)0)
123125
#endif
124126

125127
#ifdef ${PREFIX}_AST_NODE_CUSTOM_DATA_DEFINED
126-
void ${prefix}_ast_node_custom_data__initialize(${prefix}_ast_node_custom_data_t *obj);
127-
void ${prefix}_ast_node_custom_data__finalize(${prefix}_ast_node_custom_data_t *obj);
128+
void ${prefix}_ast_node_custom_data__initialize(${prefix}_ast_manager_t *mgr, ${prefix}_ast_node_custom_data_t *obj);
129+
void ${prefix}_ast_node_custom_data__finalize(${prefix}_ast_manager_t *mgr, ${prefix}_ast_node_custom_data_t *obj);
128130
#else
129-
#define ${prefix}_ast_node_custom_data__initialize(obj) ((void)0)
130-
#define ${prefix}_ast_node_custom_data__finalize(obj) ((void)0)
131+
#define ${prefix}_ast_node_custom_data__initialize(mgr, obj) ((void)0)
132+
#define ${prefix}_ast_node_custom_data__finalize(mgr, obj) ((void)0)
131133
#endif
132134

133135
#ifdef __cplusplus
@@ -182,14 +184,14 @@ ${prefix}_ast_range_t ${prefix}_ast_range__new(size_t start, size_t end) {
182184

183185
void ${prefix}_ast_manager__initialize(${prefix}_ast_manager_t *obj) {
184186
obj->first = NULL;
185-
${prefix}_ast_manager_custom_data__initialize(&(obj->custom));
187+
${prefix}_ast_manager_custom_data__initialize(obj, &(obj->custom));
186188
}
187189

188190
void ${prefix}_ast_manager__finalize(${prefix}_ast_manager_t *obj) {
189-
${prefix}_ast_manager_custom_data__finalize(&(obj->custom));
191+
${prefix}_ast_manager_custom_data__finalize(obj, &(obj->custom));
190192
while (obj->first) {
191193
assert(obj->first->manager == obj);
192-
${prefix}_ast_node__destroy(obj->first);
194+
${prefix}_ast_node__destroy(obj, obj->first);
193195
}
194196
}
195197

@@ -214,7 +216,7 @@ void ${prefix}_ast_node_array__initialize(${prefix}_ast_manager_t *mgr, ${prefix
214216
void ${prefix}_ast_node_array__finalize(${prefix}_ast_manager_t *mgr, ${prefix}_ast_node_array_t *obj) {
215217
while (obj->len > 0) {
216218
obj->len--;
217-
${prefix}_ast_node__destroy(obj->node[obj->len]);
219+
${prefix}_ast_node__destroy(mgr, obj->node[obj->len]);
218220
}
219221
PCC_AST_FREE(mgr, obj->node);
220222
}
@@ -314,7 +316,7 @@ static ${prefix}_ast_node_t *${prefix}_ast_node__create_(${prefix}_ast_manager_t
314316
${prefix}_ast_node_t *${prefix}_ast_node__create_nullary(${prefix}_ast_manager_t *mgr, ${prefix}_ast_range_t range, int label) {
315317
${prefix}_ast_node_t *const obj = ${prefix}_ast_node__create_(mgr, range, label);
316318
obj->type = ${PREFIX}_AST_NODE_TYPE_NULLARY;
317-
${prefix}_ast_node_custom_data__initialize(&(obj->custom));
319+
${prefix}_ast_node_custom_data__initialize(mgr, &(obj->custom));
318320
return obj;
319321
}
320322

@@ -334,7 +336,7 @@ ${prefix}_ast_node_t *${prefix}_ast_node__create_unary(${prefix}_ast_manager_t *
334336
${prefix}_ast_node__unlink_parent_(node);
335337
node->parent = obj;
336338
}
337-
${prefix}_ast_node_custom_data__initialize(&(obj->custom));
339+
${prefix}_ast_node_custom_data__initialize(mgr, &(obj->custom));
338340
return obj;
339341
}
340342

@@ -353,7 +355,7 @@ ${prefix}_ast_node_t *${prefix}_ast_node__create_binary(${prefix}_ast_manager_t
353355
}
354356
}
355357
}
356-
${prefix}_ast_node_custom_data__initialize(&(obj->custom));
358+
${prefix}_ast_node_custom_data__initialize(mgr, &(obj->custom));
357359
return obj;
358360
}
359361

@@ -373,15 +375,15 @@ ${prefix}_ast_node_t *${prefix}_ast_node__create_ternary(${prefix}_ast_manager_t
373375
}
374376
}
375377
}
376-
${prefix}_ast_node_custom_data__initialize(&(obj->custom));
378+
${prefix}_ast_node_custom_data__initialize(mgr, &(obj->custom));
377379
return obj;
378380
}
379381

380382
${prefix}_ast_node_t *${prefix}_ast_node__create_variadic(${prefix}_ast_manager_t *mgr, ${prefix}_ast_range_t range, int label) {
381383
${prefix}_ast_node_t *const obj = ${prefix}_ast_node__create_(mgr, range, label);
382384
obj->type = ${PREFIX}_AST_NODE_TYPE_VARIADIC;
383385
${prefix}_ast_node_array__initialize(mgr, &(obj->data.variadic));
384-
${prefix}_ast_node_custom_data__initialize(&(obj->custom));
386+
${prefix}_ast_node_custom_data__initialize(mgr, &(obj->custom));
385387
return obj;
386388
}
387389

@@ -399,9 +401,9 @@ ${prefix}_ast_node_t *${prefix}_ast_node__add_child(${prefix}_ast_node_t *obj, $
399401
return obj;
400402
}
401403

402-
void ${prefix}_ast_node__destroy(${prefix}_ast_node_t *obj) {
404+
void ${prefix}_ast_node__destroy(${prefix}_ast_manager_t *mgr, ${prefix}_ast_node_t *obj) {
403405
if (obj) {
404-
${prefix}_ast_node_custom_data__finalize(&(obj->custom));
406+
${prefix}_ast_node_custom_data__finalize(mgr, &(obj->custom));
405407
#ifndef ${PREFIX}_AST_NODE_STRING_CAPTURING_DISABLED
406408
PCC_AST_FREE(obj->manager, obj->string);
407409
#endif
@@ -414,7 +416,7 @@ void ${prefix}_ast_node__destroy(${prefix}_ast_node_t *obj) {
414416
if (node) {
415417
assert(node->parent == obj);
416418
node->parent = NULL;
417-
${prefix}_ast_node__destroy(node);
419+
${prefix}_ast_node__destroy(mgr, node);
418420
}
419421
}
420422
break;
@@ -426,7 +428,7 @@ void ${prefix}_ast_node__destroy(${prefix}_ast_node_t *obj) {
426428
if (node) {
427429
assert(node->parent == obj);
428430
node->parent = NULL;
429-
${prefix}_ast_node__destroy(node);
431+
${prefix}_ast_node__destroy(mgr, node);
430432
}
431433
}
432434
}
@@ -439,7 +441,7 @@ void ${prefix}_ast_node__destroy(${prefix}_ast_node_t *obj) {
439441
if (node) {
440442
assert(node->parent == obj);
441443
node->parent = NULL;
442-
${prefix}_ast_node__destroy(node);
444+
${prefix}_ast_node__destroy(mgr, node);
443445
}
444446
}
445447
}
@@ -451,7 +453,7 @@ void ${prefix}_ast_node__destroy(${prefix}_ast_node_t *obj) {
451453
if (node) {
452454
assert(node->parent == obj);
453455
node->parent = NULL;
454-
${prefix}_ast_node__destroy(node);
456+
${prefix}_ast_node__destroy(mgr, node);
455457
obj->data.variadic.node[i] = NULL;
456458
}
457459
}

0 commit comments

Comments
 (0)