@@ -3572,50 +3572,41 @@ pm_hash_node_closing_loc_set(pm_hash_node_t *hash, pm_token_t *token) {
3572
3572
hash->closing_loc = PM_LOCATION_TOKEN_VALUE(token);
3573
3573
}
3574
3574
3575
- static pm_node_t *
3576
- pm_assignment_value_node(pm_node_t *node) {
3575
+ /**
3576
+ * Retrieve the value being written to the given node.
3577
+ */
3578
+ static const pm_node_t *
3579
+ pm_write_node_value(const pm_node_t *node) {
3577
3580
switch (PM_NODE_TYPE(node)) {
3578
- case PM_CLASS_VARIABLE_WRITE_NODE: {
3579
- const pm_class_variable_write_node_t *cast = (pm_class_variable_write_node_t *)node;
3580
- return cast->value;
3581
- }
3582
- case PM_CONSTANT_WRITE_NODE: {
3583
- const pm_constant_write_node_t *cast = (pm_constant_write_node_t *)node;
3584
- return cast->value;
3585
- }
3586
- case PM_GLOBAL_VARIABLE_WRITE_NODE: {
3587
- const pm_global_variable_write_node_t *cast = (pm_global_variable_write_node_t *)node;
3588
- return cast->value;
3589
- }
3590
- case PM_INSTANCE_VARIABLE_WRITE_NODE: {
3591
- const pm_instance_variable_write_node_t *cast = (pm_instance_variable_write_node_t *)node;
3592
- return cast->value;
3593
- }
3594
- case PM_LOCAL_VARIABLE_WRITE_NODE: {
3595
- const pm_local_variable_write_node_t *cast = (pm_local_variable_write_node_t *)node;
3596
- return cast->value;
3597
- }
3598
- case PM_MULTI_WRITE_NODE: {
3599
- const pm_multi_write_node_t *cast = (pm_multi_write_node_t *)node;
3600
- return cast->value;
3601
- }
3581
+ case PM_CLASS_VARIABLE_WRITE_NODE:
3582
+ return ((const pm_class_variable_write_node_t *) node)->value;
3583
+ case PM_CONSTANT_WRITE_NODE:
3584
+ return ((const pm_constant_write_node_t * ) node)->value;
3585
+ case PM_GLOBAL_VARIABLE_WRITE_NODE:
3586
+ return ((const pm_global_variable_write_node_t *) node)->value;
3587
+ case PM_INSTANCE_VARIABLE_WRITE_NODE:
3588
+ return ((const pm_instance_variable_write_node_t *) node)->value;
3589
+ case PM_LOCAL_VARIABLE_WRITE_NODE:
3590
+ return ((const pm_local_variable_write_node_t *) node)->value;
3591
+ case PM_MULTI_WRITE_NODE:
3592
+ return ((const pm_multi_write_node_t *) node)->value;
3602
3593
case PM_PARENTHESES_NODE: {
3603
- const pm_parentheses_node_t *cast = (pm_parentheses_node_t *)node;
3594
+ const pm_parentheses_node_t *cast = (const pm_parentheses_node_t *) node;
3604
3595
if (cast->body != NULL) {
3605
- return pm_assignment_value_node (cast->body);
3596
+ return pm_write_node_value (cast->body);
3606
3597
}
3607
3598
return NULL;
3608
3599
}
3609
3600
case PM_BEGIN_NODE: {
3610
- const pm_begin_node_t *cast = (pm_begin_node_t *)node;
3601
+ const pm_begin_node_t *cast = (const pm_begin_node_t *) node;
3611
3602
if (cast->statements != NULL) {
3612
- return pm_assignment_value_node(( pm_node_t *) cast->statements);
3603
+ return pm_write_node_value((const pm_node_t *) cast->statements);
3613
3604
}
3614
3605
return NULL;
3615
3606
}
3616
3607
case PM_STATEMENTS_NODE: {
3617
3608
const pm_statements_node_t *cast = (const pm_statements_node_t *) node;
3618
- return pm_assignment_value_node (cast->body.nodes[cast->body.size - 1]);
3609
+ return pm_write_node_value (cast->body.nodes[cast->body.size - 1]);
3619
3610
}
3620
3611
default:
3621
3612
return NULL;
@@ -3627,8 +3618,9 @@ pm_assignment_value_node(pm_node_t *node) {
3627
3618
* literal. If such an assignment is found, it generates a warning.
3628
3619
*/
3629
3620
static void
3630
- pm_check_predicate_assignment(pm_parser_t *parser, pm_node_t *predicate) {
3631
- pm_node_t *value = pm_assignment_value_node(predicate);
3621
+ pm_predicate_check(pm_parser_t *parser, const pm_node_t *predicate) {
3622
+ const pm_node_t *value = pm_write_node_value(predicate);
3623
+
3632
3624
if ((value != NULL) && PM_NODE_FLAG_P(value, PM_NODE_FLAG_STATIC_LITERAL)) {
3633
3625
pm_parser_warn_token(parser, &parser->current, PM_WARN_EQUAL_IN_CONDITIONAL);
3634
3626
}
@@ -3647,7 +3639,7 @@ pm_if_node_create(pm_parser_t *parser,
3647
3639
const pm_token_t *end_keyword
3648
3640
) {
3649
3641
pm_conditional_predicate(predicate);
3650
- pm_check_predicate_assignment (parser, predicate);
3642
+ pm_predicate_check (parser, predicate);
3651
3643
pm_if_node_t *node = PM_ALLOC_NODE(parser, pm_if_node_t);
3652
3644
3653
3645
const uint8_t *end;
@@ -3687,7 +3679,7 @@ pm_if_node_create(pm_parser_t *parser,
3687
3679
static pm_if_node_t *
3688
3680
pm_if_node_modifier_create(pm_parser_t *parser, pm_node_t *statement, const pm_token_t *if_keyword, pm_node_t *predicate) {
3689
3681
pm_conditional_predicate(predicate);
3690
- pm_check_predicate_assignment (parser, predicate);
3682
+ pm_predicate_check (parser, predicate);
3691
3683
pm_if_node_t *node = PM_ALLOC_NODE(parser, pm_if_node_t);
3692
3684
3693
3685
pm_statements_node_t *statements = pm_statements_node_create(parser);
@@ -3720,7 +3712,7 @@ static pm_if_node_t *
3720
3712
pm_if_node_ternary_create(pm_parser_t *parser, pm_node_t *predicate, const pm_token_t *qmark, pm_node_t *true_expression, const pm_token_t *colon, pm_node_t *false_expression) {
3721
3713
pm_assert_value_expression(parser, predicate);
3722
3714
pm_conditional_predicate(predicate);
3723
- pm_check_predicate_assignment (parser, predicate);
3715
+ pm_predicate_check (parser, predicate);
3724
3716
3725
3717
pm_statements_node_t *if_statements = pm_statements_node_create(parser);
3726
3718
pm_statements_node_body_append(if_statements, true_expression);
@@ -5964,7 +5956,7 @@ pm_undef_node_append(pm_undef_node_t *node, pm_node_t *name) {
5964
5956
static pm_unless_node_t *
5965
5957
pm_unless_node_create(pm_parser_t *parser, const pm_token_t *keyword, pm_node_t *predicate, const pm_token_t *then_keyword, pm_statements_node_t *statements) {
5966
5958
pm_conditional_predicate(predicate);
5967
- pm_check_predicate_assignment (parser, predicate);
5959
+ pm_predicate_check (parser, predicate);
5968
5960
pm_unless_node_t *node = PM_ALLOC_NODE(parser, pm_unless_node_t);
5969
5961
5970
5962
const uint8_t *end;
@@ -6000,7 +5992,7 @@ pm_unless_node_create(pm_parser_t *parser, const pm_token_t *keyword, pm_node_t
6000
5992
static pm_unless_node_t *
6001
5993
pm_unless_node_modifier_create(pm_parser_t *parser, pm_node_t *statement, const pm_token_t *unless_keyword, pm_node_t *predicate) {
6002
5994
pm_conditional_predicate(predicate);
6003
- pm_check_predicate_assignment (parser, predicate);
5995
+ pm_predicate_check (parser, predicate);
6004
5996
pm_unless_node_t *node = PM_ALLOC_NODE(parser, pm_unless_node_t);
6005
5997
6006
5998
pm_statements_node_t *statements = pm_statements_node_create(parser);
@@ -6038,7 +6030,7 @@ pm_unless_node_end_keyword_loc_set(pm_unless_node_t *node, const pm_token_t *end
6038
6030
static pm_until_node_t *
6039
6031
pm_until_node_create(pm_parser_t *parser, const pm_token_t *keyword, const pm_token_t *closing, pm_node_t *predicate, pm_statements_node_t *statements, pm_node_flags_t flags) {
6040
6032
pm_until_node_t *node = PM_ALLOC_NODE(parser, pm_until_node_t);
6041
- pm_check_predicate_assignment (parser, predicate);
6033
+ pm_predicate_check (parser, predicate);
6042
6034
6043
6035
*node = (pm_until_node_t) {
6044
6036
{
@@ -6064,7 +6056,7 @@ pm_until_node_create(pm_parser_t *parser, const pm_token_t *keyword, const pm_to
6064
6056
static pm_until_node_t *
6065
6057
pm_until_node_modifier_create(pm_parser_t *parser, const pm_token_t *keyword, pm_node_t *predicate, pm_statements_node_t *statements, pm_node_flags_t flags) {
6066
6058
pm_until_node_t *node = PM_ALLOC_NODE(parser, pm_until_node_t);
6067
- pm_check_predicate_assignment (parser, predicate);
6059
+ pm_predicate_check (parser, predicate);
6068
6060
6069
6061
*node = (pm_until_node_t) {
6070
6062
{
@@ -6134,7 +6126,7 @@ pm_when_node_statements_set(pm_when_node_t *node, pm_statements_node_t *statemen
6134
6126
static pm_while_node_t *
6135
6127
pm_while_node_create(pm_parser_t *parser, const pm_token_t *keyword, const pm_token_t *closing, pm_node_t *predicate, pm_statements_node_t *statements, pm_node_flags_t flags) {
6136
6128
pm_while_node_t *node = PM_ALLOC_NODE(parser, pm_while_node_t);
6137
- pm_check_predicate_assignment (parser, predicate);
6129
+ pm_predicate_check (parser, predicate);
6138
6130
6139
6131
*node = (pm_while_node_t) {
6140
6132
{
@@ -6160,7 +6152,7 @@ pm_while_node_create(pm_parser_t *parser, const pm_token_t *keyword, const pm_to
6160
6152
static pm_while_node_t *
6161
6153
pm_while_node_modifier_create(pm_parser_t *parser, const pm_token_t *keyword, pm_node_t *predicate, pm_statements_node_t *statements, pm_node_flags_t flags) {
6162
6154
pm_while_node_t *node = PM_ALLOC_NODE(parser, pm_while_node_t);
6163
- pm_check_predicate_assignment (parser, predicate);
6155
+ pm_predicate_check (parser, predicate);
6164
6156
6165
6157
*node = (pm_while_node_t) {
6166
6158
{
@@ -15937,7 +15929,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b
15937
15929
} else {
15938
15930
receiver = parse_expression(parser, PM_BINDING_POWER_COMPOSITION, true, PM_ERR_NOT_EXPRESSION);
15939
15931
pm_conditional_predicate(receiver);
15940
- pm_check_predicate_assignment (parser, receiver);
15932
+ pm_predicate_check (parser, receiver);
15941
15933
15942
15934
if (!parser->recovering) {
15943
15935
accept1(parser, PM_TOKEN_NEWLINE);
@@ -15948,7 +15940,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b
15948
15940
} else {
15949
15941
receiver = parse_expression(parser, PM_BINDING_POWER_NOT, true, PM_ERR_NOT_EXPRESSION);
15950
15942
pm_conditional_predicate(receiver);
15951
- pm_check_predicate_assignment (parser, receiver);
15943
+ pm_predicate_check (parser, receiver);
15952
15944
}
15953
15945
15954
15946
return (pm_node_t *) pm_call_node_not_create(parser, receiver, &message, &arguments);
@@ -16619,7 +16611,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b
16619
16611
pm_call_node_t *node = pm_call_node_unary_create(parser, &operator, receiver, "!");
16620
16612
16621
16613
pm_conditional_predicate(receiver);
16622
- pm_check_predicate_assignment (parser, receiver);
16614
+ pm_predicate_check (parser, receiver);
16623
16615
return (pm_node_t *) node;
16624
16616
}
16625
16617
case PM_TOKEN_TILDE: {
0 commit comments