Skip to content

Commit a20afe1

Browse files
committed
Introduce PM_NODE_FLAGS macro
1 parent 3e0b5c9 commit a20afe1

File tree

2 files changed

+19
-14
lines changed

2 files changed

+19
-14
lines changed

src/prism.c

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ pm_version(void) {
2222
/* Helpful node-related macros */
2323
/******************************************************************************/
2424

25+
#define FL PM_NODE_FLAGS
2526
#define UP PM_NODE_UPCAST
2627

2728
#define PM_TOKEN_START(token_) ((token_)->start)
@@ -2845,7 +2846,7 @@ pm_call_and_write_node_create(pm_parser_t *parser, pm_call_node_t *target, const
28452846
pm_call_and_write_node_t *node = PM_NODE_ALLOC(parser, pm_call_and_write_node_t);
28462847

28472848
*node = (pm_call_and_write_node_t) {
2848-
.base = PM_NODE_INIT_NODES(parser, PM_CALL_AND_WRITE_NODE, target->base.flags, target, value),
2849+
.base = PM_NODE_INIT_NODES(parser, PM_CALL_AND_WRITE_NODE, FL(target), target, value),
28492850
.receiver = target->receiver,
28502851
.call_operator_loc = target->call_operator_loc,
28512852
.message_loc = target->message_loc,
@@ -2900,7 +2901,7 @@ pm_index_and_write_node_create(pm_parser_t *parser, pm_call_node_t *target, cons
29002901

29012902
assert(!target->block || PM_NODE_TYPE_P(target->block, PM_BLOCK_ARGUMENT_NODE));
29022903
*node = (pm_index_and_write_node_t) {
2903-
.base = PM_NODE_INIT_NODES(parser, PM_INDEX_AND_WRITE_NODE, target->base.flags, target, value),
2904+
.base = PM_NODE_INIT_NODES(parser, PM_INDEX_AND_WRITE_NODE, FL(target), target, value),
29042905
.receiver = target->receiver,
29052906
.call_operator_loc = target->call_operator_loc,
29062907
.opening_loc = target->opening_loc,
@@ -2928,7 +2929,7 @@ pm_call_operator_write_node_create(pm_parser_t *parser, pm_call_node_t *target,
29282929
pm_call_operator_write_node_t *node = PM_NODE_ALLOC(parser, pm_call_operator_write_node_t);
29292930

29302931
*node = (pm_call_operator_write_node_t) {
2931-
.base = PM_NODE_INIT_NODES(parser, PM_CALL_OPERATOR_WRITE_NODE, target->base.flags, target, value),
2932+
.base = PM_NODE_INIT_NODES(parser, PM_CALL_OPERATOR_WRITE_NODE, FL(target), target, value),
29322933
.receiver = target->receiver,
29332934
.call_operator_loc = target->call_operator_loc,
29342935
.message_loc = target->message_loc,
@@ -2960,7 +2961,7 @@ pm_index_operator_write_node_create(pm_parser_t *parser, pm_call_node_t *target,
29602961

29612962
assert(!target->block || PM_NODE_TYPE_P(target->block, PM_BLOCK_ARGUMENT_NODE));
29622963
*node = (pm_index_operator_write_node_t) {
2963-
.base = PM_NODE_INIT_NODES(parser, PM_INDEX_OPERATOR_WRITE_NODE, target->base.flags, target, value),
2964+
.base = PM_NODE_INIT_NODES(parser, PM_INDEX_OPERATOR_WRITE_NODE, FL(target), target, value),
29642965
.receiver = target->receiver,
29652966
.call_operator_loc = target->call_operator_loc,
29662967
.opening_loc = target->opening_loc,
@@ -2990,7 +2991,7 @@ pm_call_or_write_node_create(pm_parser_t *parser, pm_call_node_t *target, const
29902991
pm_call_or_write_node_t *node = PM_NODE_ALLOC(parser, pm_call_or_write_node_t);
29912992

29922993
*node = (pm_call_or_write_node_t) {
2993-
.base = PM_NODE_INIT_NODES(parser, PM_CALL_OR_WRITE_NODE, target->base.flags, target, value),
2994+
.base = PM_NODE_INIT_NODES(parser, PM_CALL_OR_WRITE_NODE, FL(target), target, value),
29942995
.receiver = target->receiver,
29952996
.call_operator_loc = target->call_operator_loc,
29962997
.message_loc = target->message_loc,
@@ -3022,7 +3023,7 @@ pm_index_or_write_node_create(pm_parser_t *parser, pm_call_node_t *target, const
30223023

30233024
assert(!target->block || PM_NODE_TYPE_P(target->block, PM_BLOCK_ARGUMENT_NODE));
30243025
*node = (pm_index_or_write_node_t) {
3025-
.base = PM_NODE_INIT_NODES(parser, PM_INDEX_OR_WRITE_NODE, target->base.flags, target, value),
3026+
.base = PM_NODE_INIT_NODES(parser, PM_INDEX_OR_WRITE_NODE, FL(target), target, value),
30263027
.receiver = target->receiver,
30273028
.call_operator_loc = target->call_operator_loc,
30283029
.opening_loc = target->opening_loc,
@@ -3050,7 +3051,7 @@ pm_call_target_node_create(pm_parser_t *parser, pm_call_node_t *target) {
30503051
pm_call_target_node_t *node = PM_NODE_ALLOC(parser, pm_call_target_node_t);
30513052

30523053
*node = (pm_call_target_node_t) {
3053-
.base = PM_NODE_INIT_NODE(parser, PM_CALL_TARGET_NODE, target->base.flags, target),
3054+
.base = PM_NODE_INIT_NODE(parser, PM_CALL_TARGET_NODE, FL(target), target),
30543055
.receiver = target->receiver,
30553056
.call_operator_loc = target->call_operator_loc,
30563057
.name = target->name,
@@ -3072,13 +3073,12 @@ pm_call_target_node_create(pm_parser_t *parser, pm_call_node_t *target) {
30723073
static pm_index_target_node_t *
30733074
pm_index_target_node_create(pm_parser_t *parser, pm_call_node_t *target) {
30743075
pm_index_target_node_t *node = PM_NODE_ALLOC(parser, pm_index_target_node_t);
3075-
pm_node_flags_t flags = target->base.flags;
30763076

30773077
pm_index_arguments_check(parser, target->arguments, target->block);
3078-
30793078
assert(!target->block || PM_NODE_TYPE_P(target->block, PM_BLOCK_ARGUMENT_NODE));
3079+
30803080
*node = (pm_index_target_node_t) {
3081-
.base = PM_NODE_INIT_NODE(parser, PM_INDEX_TARGET_NODE, flags | PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE, target),
3081+
.base = PM_NODE_INIT_NODE(parser, PM_INDEX_TARGET_NODE, FL(target) | PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE, target),
30823082
.receiver = target->receiver,
30833083
.opening_loc = target->opening_loc,
30843084
.arguments = target->arguments,
@@ -4745,10 +4745,10 @@ pm_interpolated_regular_expression_node_closing_set(pm_parser_t *parser, pm_inte
47454745
static inline void
47464746
pm_interpolated_string_node_append(pm_interpolated_string_node_t *node, pm_node_t *part) {
47474747
#define CLEAR_FLAGS(node) \
4748-
node->base.flags = (pm_node_flags_t) (node->base.flags & ~(PM_NODE_FLAG_STATIC_LITERAL | PM_INTERPOLATED_STRING_NODE_FLAGS_FROZEN | PM_INTERPOLATED_STRING_NODE_FLAGS_MUTABLE))
4748+
node->base.flags = (pm_node_flags_t) (FL(node) & ~(PM_NODE_FLAG_STATIC_LITERAL | PM_INTERPOLATED_STRING_NODE_FLAGS_FROZEN | PM_INTERPOLATED_STRING_NODE_FLAGS_MUTABLE))
47494749

47504750
#define MUTABLE_FLAGS(node) \
4751-
node->base.flags = (pm_node_flags_t) ((node->base.flags | PM_INTERPOLATED_STRING_NODE_FLAGS_MUTABLE) & ~PM_INTERPOLATED_STRING_NODE_FLAGS_FROZEN);
4751+
node->base.flags = (pm_node_flags_t) ((FL(node) | PM_INTERPOLATED_STRING_NODE_FLAGS_MUTABLE) & ~PM_INTERPOLATED_STRING_NODE_FLAGS_FROZEN);
47524752

47534753
if (node->parts.size == 0 && node->opening_loc.start == NULL) {
47544754
node->base.location.start = part->location.start;
@@ -19674,7 +19674,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b
1967419674
parse_regular_expression_errors(parser, node);
1967519675
}
1967619676

19677-
pm_node_flag_set(UP(node), parse_and_validate_regular_expression_encoding(parser, &unescaped, ascii_only, node->base.flags));
19677+
pm_node_flag_set(UP(node), parse_and_validate_regular_expression_encoding(parser, &unescaped, ascii_only, FL(node)));
1967819678
return UP(node);
1967919679
}
1968019680

templates/include/prism/ast.h.erb

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,10 +151,15 @@ typedef struct pm_node {
151151
*/
152152
#define PM_NODE_TYPE_P(node_, type_) (PM_NODE_TYPE(node_) == (type_))
153153

154+
/**
155+
* Return the flags associated with the given node.
156+
*/
157+
#define PM_NODE_FLAGS(node_) (PM_NODE_UPCAST(node_)->flags)
158+
154159
/**
155160
* Return true if the given flag is set on the given node.
156161
*/
157-
#define PM_NODE_FLAG_P(node_, flag_) ((PM_NODE_UPCAST(node_)->flags & (flag_)) != 0)
162+
#define PM_NODE_FLAG_P(node_, flag_) ((PM_NODE_FLAGS(node_) & (flag_)) != 0)
158163
<%- nodes.each do |node| -%>
159164

160165
/**

0 commit comments

Comments
 (0)