Skip to content

Commit 44ed07e

Browse files
committed
Modify pcc_ast.peg
The functions below are added. - pcc_ast_node__create_0_int() - pcc_ast_node__create_0_ext_int()
1 parent 1e3adfa commit 44ed07e

File tree

2 files changed

+37
-11
lines changed

2 files changed

+37
-11
lines changed

import/code/README.md

+4-1
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` (version 2.2.0)
9+
### `code/pcc_ast.peg` (version 2.3.0)
1010

1111
#### Synopsis
1212

@@ -38,6 +38,9 @@ The usage procedure is shown below.
3838
3. Create an AST node using either of the following functions in every rule action.
3939
- <code><b><i>pcc</i></b>\_ast_node_t *<b><i>pcc</i></b>\_ast_node__create_0(void);</code>
4040
+ Returns a newly created nullary node.
41+
- <code><b><i>pcc</i></b>\_ast_node_t *<b><i>pcc</i></b>\_ast_node__create_0_int(ptrdiff_t val);</code>
42+
+ Returns a newly created nullary node retaining an integer value.
43+
+ The integer value can be accessed using <code>ptrdiff_t <b><i>pcc</i></b>\_ast_node__get_integer(<b><i>pcc</i></b>\_ast_node_t *node)</code>.
4144
- <code><b><i>pcc</i></b>\_ast_node_t *<b><i>pcc</i></b>\_ast_node__create_0_str(const char *str);</code>
4245
+ Returns a newly created nullary node retaining a copy of the specified string.
4346
+ The string can be accessed using <code>const char *<b><i>pcc</i></b>\_ast_node__get_string(<b><i>pcc</i></b>\_ast_node_t *node)</code>.

import/code/pcc_ast.peg

+33-10
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
# THE SOFTWARE.
2020

2121
%common {
22-
/* Using AST utility import file version 2.2.0 */
22+
/* Using AST utility import file version 2.3.0 */
2323
}
2424

2525
%header {
@@ -75,7 +75,10 @@ struct ${prefix}_ast_node_tag {
7575
${prefix}_ast_node_data_t data;
7676
${prefix}_ast_range_t range;
7777
int label;
78-
#ifndef ${PREFIX}_AST_NODE_STRING_CAPTURING_DISABLED
78+
#ifndef ${PREFIX}_AST_NODE_NO_INTEGER_DATA
79+
ptrdiff_t integer;
80+
#endif
81+
#ifndef ${PREFIX}_AST_NODE_NO_STRING_DATA
7982
char *string;
8083
#endif
8184
#ifdef ${PREFIX}_AST_NODE_CUSTOM_DATA_DEFINED
@@ -102,15 +105,22 @@ void ${prefix}_ast_node_array__finalize(${prefix}_ast_manager_t *mgr, ${prefix}_
102105
void ${prefix}_ast_node_array__add(${prefix}_ast_manager_t *mgr, ${prefix}_ast_node_array_t *obj, ${prefix}_ast_node_t *node);
103106

104107
${prefix}_ast_node_t *${prefix}_ast_node__create_nullary(${prefix}_ast_manager_t *mgr, ${prefix}_ast_range_t range, int label);
105-
${prefix}_ast_node_t *${prefix}_ast_node__create_nullary_with_literal(${prefix}_ast_manager_t *mgr, ${prefix}_ast_range_t range, int label, const char *string);
108+
${prefix}_ast_node_t *${prefix}_ast_node__create_nullary_with_integer(${prefix}_ast_manager_t *mgr, ${prefix}_ast_range_t range, int label, ptrdiff_t integer);
109+
${prefix}_ast_node_t *${prefix}_ast_node__create_nullary_with_string(${prefix}_ast_manager_t *mgr, ${prefix}_ast_range_t range, int label, const char *string);
106110
${prefix}_ast_node_t *${prefix}_ast_node__create_unary(${prefix}_ast_manager_t *mgr, ${prefix}_ast_range_t range, int label, ${prefix}_ast_node_t *node);
107111
${prefix}_ast_node_t *${prefix}_ast_node__create_binary(${prefix}_ast_manager_t *mgr, ${prefix}_ast_range_t range, int label, ${prefix}_ast_node_t *node0, ${prefix}_ast_node_t *node1);
108112
${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);
109113
${prefix}_ast_node_t *${prefix}_ast_node__create_variadic(${prefix}_ast_manager_t *mgr, ${prefix}_ast_range_t range, int label);
110114
${prefix}_ast_node_t *${prefix}_ast_node__add_child(${prefix}_ast_node_t *obj, ${prefix}_ast_node_t *node); /* for a variadic node only */
111115
void ${prefix}_ast_node__destroy(${prefix}_ast_manager_t *mgr, ${prefix}_ast_node_t *obj);
112116

113-
#ifndef ${PREFIX}_AST_NODE_STRING_CAPTURING_DISABLED
117+
#ifndef ${PREFIX}_AST_NODE_NO_INTEGER_DATA
118+
#define ${prefix}_ast_node__get_integer(obj) (obj->integer)
119+
#else
120+
#define ${prefix}_ast_node__get_integer(obj) 0
121+
#endif
122+
123+
#ifndef ${PREFIX}_AST_NODE_NO_STRING_DATA
114124
#define ${prefix}_ast_node__get_string(obj) ((const char *)(obj->string))
115125
#else
116126
#define ${prefix}_ast_node__get_string(obj) ((const char *)NULL)
@@ -141,14 +151,16 @@ void ${prefix}_ast_node_custom_data__finalize(${prefix}_ast_manager_t *mgr, ${pr
141151
#define ${prefix}_ast__matched_range() ${prefix}_ast_range__new(pcc_capture__0s, pcc_capture__0e)
142152

143153
#define ${prefix}_ast_node__create_0() ${prefix}_ast_node__create_nullary(auxil, ${prefix}_ast__matched_range(), 0)
144-
#define ${prefix}_ast_node__create_0_str(str) ${prefix}_ast_node__create_nullary_with_literal(auxil, ${prefix}_ast__matched_range(), 0, str)
154+
#define ${prefix}_ast_node__create_0_int(val) ${prefix}_ast_node__create_nullary_with_integer(auxil, ${prefix}_ast__matched_range(), 0, val)
155+
#define ${prefix}_ast_node__create_0_str(str) ${prefix}_ast_node__create_nullary_with_string(auxil, ${prefix}_ast__matched_range(), 0, str)
145156
#define ${prefix}_ast_node__create_1(node) ${prefix}_ast_node__create_unary(auxil, ${prefix}_ast__matched_range(), 0, node)
146157
#define ${prefix}_ast_node__create_2(node0, node1) ${prefix}_ast_node__create_binary(auxil, ${prefix}_ast__matched_range(), 0, node0, node1)
147158
#define ${prefix}_ast_node__create_3(node0, node1, node2) ${prefix}_ast_node__create_ternary(auxil, ${prefix}_ast__matched_range(), 0, node0, node1, node2)
148159
#define ${prefix}_ast_node__create_v() ${prefix}_ast_node__create_variadic(auxil, ${prefix}_ast__matched_range(), 0)
149160

150161
#define ${prefix}_ast_node__create_0_ext(label) ${prefix}_ast_node__create_nullary(auxil, ${prefix}_ast__matched_range(), label)
151-
#define ${prefix}_ast_node__create_0_ext_str(label, str) ${prefix}_ast_node__create_nullary_with_literal(auxil, ${prefix}_ast__matched_range(), label, str)
162+
#define ${prefix}_ast_node__create_0_ext_int(label, val) ${prefix}_ast_node__create_nullary_with_integer(auxil, ${prefix}_ast__matched_range(), label, val)
163+
#define ${prefix}_ast_node__create_0_ext_str(label, str) ${prefix}_ast_node__create_nullary_with_string(auxil, ${prefix}_ast__matched_range(), label, str)
152164
#define ${prefix}_ast_node__create_1_ext(label, node) ${prefix}_ast_node__create_unary(auxil, ${prefix}_ast__matched_range(), label, node)
153165
#define ${prefix}_ast_node__create_2_ext(label, node0, node1) ${prefix}_ast_node__create_binary(auxil, ${prefix}_ast__matched_range(), label, node0, node1)
154166
#define ${prefix}_ast_node__create_3_ext(label, node0, node1, node2) ${prefix}_ast_node__create_ternary(auxil, ${prefix}_ast__matched_range(), label, node0, node1, node2)
@@ -307,7 +319,10 @@ static ${prefix}_ast_node_t *${prefix}_ast_node__create_(${prefix}_ast_manager_t
307319
obj->parent = NULL;
308320
obj->range = range;
309321
obj->label = label;
310-
#ifndef ${PREFIX}_AST_NODE_STRING_CAPTURING_DISABLED
322+
#ifndef ${PREFIX}_AST_NODE_NO_INTEGER_DATA
323+
obj->integer = 0;
324+
#endif
325+
#ifndef ${PREFIX}_AST_NODE_NO_STRING_DATA
311326
obj->string = NULL;
312327
#endif
313328
return obj;
@@ -320,9 +335,17 @@ ${prefix}_ast_node_t *${prefix}_ast_node__create_nullary(${prefix}_ast_manager_t
320335
return obj;
321336
}
322337

323-
${prefix}_ast_node_t *${prefix}_ast_node__create_nullary_with_literal(${prefix}_ast_manager_t *mgr, ${prefix}_ast_range_t range, int label, const char *string) {
338+
${prefix}_ast_node_t *${prefix}_ast_node__create_nullary_with_integer(${prefix}_ast_manager_t *mgr, ${prefix}_ast_range_t range, int label, ptrdiff_t integer) {
339+
${prefix}_ast_node_t *const obj = ${prefix}_ast_node__create_nullary(mgr, range, label);
340+
#ifndef ${PREFIX}_AST_NODE_NO_INTEGER_DATA
341+
obj->integer = integer;
342+
#endif
343+
return obj;
344+
}
345+
346+
${prefix}_ast_node_t *${prefix}_ast_node__create_nullary_with_string(${prefix}_ast_manager_t *mgr, ${prefix}_ast_range_t range, int label, const char *string) {
324347
${prefix}_ast_node_t *const obj = ${prefix}_ast_node__create_nullary(mgr, range, label);
325-
#ifndef ${PREFIX}_AST_NODE_STRING_CAPTURING_DISABLED
348+
#ifndef ${PREFIX}_AST_NODE_NO_STRING_DATA
326349
obj->string = ${prefix}_ast__strdup(mgr, string);
327350
#endif
328351
return obj;
@@ -404,7 +427,7 @@ ${prefix}_ast_node_t *${prefix}_ast_node__add_child(${prefix}_ast_node_t *obj, $
404427
void ${prefix}_ast_node__destroy(${prefix}_ast_manager_t *mgr, ${prefix}_ast_node_t *obj) {
405428
if (obj) {
406429
${prefix}_ast_node_custom_data__finalize(mgr, &(obj->custom));
407-
#ifndef ${PREFIX}_AST_NODE_STRING_CAPTURING_DISABLED
430+
#ifndef ${PREFIX}_AST_NODE_NO_STRING_DATA
408431
PCC_AST_FREE(obj->manager, obj->string);
409432
#endif
410433
switch (obj->type) {

0 commit comments

Comments
 (0)