@@ -5707,8 +5707,10 @@ lex_identifier(yp_parser_t *parser, bool previous_command_start) {
5707
5707
}
5708
5708
}
5709
5709
5710
- return YP_TOKEN_IDENTIFIER;
5711
- } else if (lex_state_p(parser, YP_LEX_STATE_FNAME) && peek_offset(parser, 1) != '~' && peek_offset(parser, 1) != '>' && (peek_offset(parser, 1) != '=' || peek_offset(parser, 2) == '>') && match(parser, '=')) {
5710
+ return YP_TOKEN_METHOD_NAME;
5711
+ }
5712
+
5713
+ if (lex_state_p(parser, YP_LEX_STATE_FNAME) && peek_offset(parser, 1) != '~' && peek_offset(parser, 1) != '>' && (peek_offset(parser, 1) != '=' || peek_offset(parser, 2) == '>') && match(parser, '=')) {
5712
5714
// If we're in a position where we can accept a = at the end of an
5713
5715
// identifier, then we'll optionally accept it.
5714
5716
return YP_TOKEN_IDENTIFIER;
@@ -7301,7 +7303,7 @@ parser_lex(yp_parser_t *parser) {
7301
7303
7302
7304
yp_lex_state_t last_state = parser->lex_state;
7303
7305
7304
- if (type == YP_TOKEN_IDENTIFIER || type == YP_TOKEN_CONSTANT) {
7306
+ if (type == YP_TOKEN_IDENTIFIER || type == YP_TOKEN_CONSTANT || type == YP_TOKEN_METHOD_NAME ) {
7305
7307
if (lex_state_p(parser, YP_LEX_STATE_BEG_ANY | YP_LEX_STATE_ARG_ANY | YP_LEX_STATE_DOT)) {
7306
7308
if (previous_command_start) {
7307
7309
lex_state_set(parser, YP_LEX_STATE_CMDARG);
@@ -9289,7 +9291,8 @@ parse_parameters(
9289
9291
case YP_TOKEN_IDENTIFIER:
9290
9292
case YP_TOKEN_CONSTANT:
9291
9293
case YP_TOKEN_INSTANCE_VARIABLE:
9292
- case YP_TOKEN_GLOBAL_VARIABLE: {
9294
+ case YP_TOKEN_GLOBAL_VARIABLE:
9295
+ case YP_TOKEN_METHOD_NAME: {
9293
9296
parser_lex(parser);
9294
9297
switch (parser->previous.type) {
9295
9298
case YP_TOKEN_CONSTANT:
@@ -9304,6 +9307,9 @@ parse_parameters(
9304
9307
case YP_TOKEN_CLASS_VARIABLE:
9305
9308
yp_diagnostic_list_append(&parser->error_list, parser->previous.start, parser->previous.end, YP_ERR_ARGUMENT_FORMAL_CLASS);
9306
9309
break;
9310
+ case YP_TOKEN_METHOD_NAME:
9311
+ yp_diagnostic_list_append(&parser->error_list, parser->previous.start, parser->previous.end, YP_ERR_PARAMETER_METHOD_NAME);
9312
+ break;
9307
9313
default: break;
9308
9314
}
9309
9315
@@ -10133,6 +10139,7 @@ parse_symbol(yp_parser_t *parser, yp_lex_mode_t *lex_mode, yp_lex_state_t next_s
10133
10139
case YP_TOKEN_IDENTIFIER:
10134
10140
case YP_TOKEN_CONSTANT:
10135
10141
case YP_TOKEN_INSTANCE_VARIABLE:
10142
+ case YP_TOKEN_METHOD_NAME:
10136
10143
case YP_TOKEN_CLASS_VARIABLE:
10137
10144
case YP_TOKEN_GLOBAL_VARIABLE:
10138
10145
case YP_TOKEN_NUMBERED_REFERENCE:
@@ -10147,7 +10154,7 @@ parse_symbol(yp_parser_t *parser, yp_lex_mode_t *lex_mode, yp_lex_state_t next_s
10147
10154
symbol = parser->previous;
10148
10155
break;
10149
10156
default:
10150
- expect1 (parser, YP_TOKEN_IDENTIFIER, YP_ERR_SYMBOL_INVALID);
10157
+ expect2 (parser, YP_TOKEN_IDENTIFIER, YP_TOKEN_METHOD_NAME , YP_ERR_SYMBOL_INVALID);
10151
10158
symbol = parser->previous;
10152
10159
break;
10153
10160
}
@@ -10219,7 +10226,8 @@ parse_undef_argument(yp_parser_t *parser) {
10219
10226
case YP_CASE_KEYWORD:
10220
10227
case YP_CASE_OPERATOR:
10221
10228
case YP_TOKEN_CONSTANT:
10222
- case YP_TOKEN_IDENTIFIER: {
10229
+ case YP_TOKEN_IDENTIFIER:
10230
+ case YP_TOKEN_METHOD_NAME: {
10223
10231
parser_lex(parser);
10224
10232
10225
10233
yp_token_t opening = not_provided(parser);
@@ -10249,7 +10257,8 @@ parse_alias_argument(yp_parser_t *parser, bool first) {
10249
10257
case YP_CASE_OPERATOR:
10250
10258
case YP_CASE_KEYWORD:
10251
10259
case YP_TOKEN_CONSTANT:
10252
- case YP_TOKEN_IDENTIFIER: {
10260
+ case YP_TOKEN_IDENTIFIER:
10261
+ case YP_TOKEN_METHOD_NAME: {
10253
10262
if (first) {
10254
10263
lex_state_set(parser, YP_LEX_STATE_FNAME | YP_LEX_STATE_FITEM);
10255
10264
}
@@ -10356,6 +10365,7 @@ parse_method_definition_name(yp_parser_t *parser) {
10356
10365
case YP_CASE_KEYWORD:
10357
10366
case YP_TOKEN_CONSTANT:
10358
10367
case YP_TOKEN_IDENTIFIER:
10368
+ case YP_TOKEN_METHOD_NAME:
10359
10369
parser_lex(parser);
10360
10370
return parser->previous;
10361
10371
case YP_CASE_OPERATOR:
@@ -10787,7 +10797,8 @@ parse_pattern_hash(yp_parser_t *parser, yp_node_t *first_assoc) {
10787
10797
static yp_node_t *
10788
10798
parse_pattern_primitive(yp_parser_t *parser, yp_diagnostic_id_t diag_id) {
10789
10799
switch (parser->current.type) {
10790
- case YP_TOKEN_IDENTIFIER: {
10800
+ case YP_TOKEN_IDENTIFIER:
10801
+ case YP_TOKEN_METHOD_NAME: {
10791
10802
parser_lex(parser);
10792
10803
yp_parser_local_add_token(parser, &parser->previous);
10793
10804
return (yp_node_t *) yp_local_variable_target_node_create(parser, &parser->previous);
@@ -11722,7 +11733,8 @@ parse_expression_prefix(yp_parser_t *parser, yp_binding_power_t binding_power) {
11722
11733
11723
11734
return node;
11724
11735
}
11725
- case YP_TOKEN_IDENTIFIER: {
11736
+ case YP_TOKEN_IDENTIFIER:
11737
+ case YP_TOKEN_METHOD_NAME: {
11726
11738
parser_lex(parser);
11727
11739
yp_token_t identifier = parser->previous;
11728
11740
yp_node_t *node = parse_variable_call(parser);
@@ -13949,7 +13961,8 @@ parse_expression_infix(yp_parser_t *parser, yp_node_t *node, yp_binding_power_t
13949
13961
case YP_CASE_OPERATOR:
13950
13962
case YP_CASE_KEYWORD:
13951
13963
case YP_TOKEN_CONSTANT:
13952
- case YP_TOKEN_IDENTIFIER: {
13964
+ case YP_TOKEN_IDENTIFIER:
13965
+ case YP_TOKEN_METHOD_NAME: {
13953
13966
parser_lex(parser);
13954
13967
message = parser->previous;
13955
13968
break;
@@ -14079,7 +14092,8 @@ parse_expression_infix(yp_parser_t *parser, yp_node_t *node, yp_binding_power_t
14079
14092
}
14080
14093
case YP_CASE_OPERATOR:
14081
14094
case YP_CASE_KEYWORD:
14082
- case YP_TOKEN_IDENTIFIER: {
14095
+ case YP_TOKEN_IDENTIFIER:
14096
+ case YP_TOKEN_METHOD_NAME: {
14083
14097
parser_lex(parser);
14084
14098
yp_token_t message = parser->previous;
14085
14099
0 commit comments