@@ -1409,7 +1409,7 @@ pm_conditional_predicate_warn_write_literal_p(const pm_node_t *node) {
14091409static inline void
14101410pm_conditional_predicate_warn_write_literal(pm_parser_t *parser, const pm_node_t *node) {
14111411 if (pm_conditional_predicate_warn_write_literal_p(node)) {
1412- pm_parser_warn_node(parser, node, parser->version = = PM_OPTIONS_VERSION_CRUBY_3_3 ? PM_WARN_EQUAL_IN_CONDITIONAL_3_3 : PM_WARN_EQUAL_IN_CONDITIONAL);
1412+ pm_parser_warn_node(parser, node, parser->version < = PM_OPTIONS_VERSION_CRUBY_3_3 ? PM_WARN_EQUAL_IN_CONDITIONAL_3_3 : PM_WARN_EQUAL_IN_CONDITIONAL);
14131413 }
14141414}
14151415
@@ -2976,7 +2976,7 @@ pm_call_and_write_node_create(pm_parser_t *parser, pm_call_node_t *target, const
29762976 */
29772977static void
29782978pm_index_arguments_check(pm_parser_t *parser, const pm_arguments_node_t *arguments, const pm_node_t *block) {
2979- if (parser->version != PM_OPTIONS_VERSION_CRUBY_3_3 ) {
2979+ if (parser->version >= PM_OPTIONS_VERSION_CRUBY_3_4 ) {
29802980 if (arguments != NULL && PM_NODE_FLAG_P(arguments, PM_ARGUMENTS_NODE_FLAGS_CONTAINS_KEYWORDS)) {
29812981 pm_node_t *node;
29822982 PM_NODE_LIST_FOREACH(&arguments->arguments, index, node) {
@@ -9090,7 +9090,7 @@ lex_global_variable(pm_parser_t *parser) {
90909090 } while ((width = char_is_identifier(parser, parser->current.end, parser->end - parser->current.end)) > 0);
90919091
90929092 // $0 isn't allowed to be followed by anything.
9093- pm_diagnostic_id_t diag_id = parser->version = = PM_OPTIONS_VERSION_CRUBY_3_3 ? PM_ERR_INVALID_VARIABLE_GLOBAL_3_3 : PM_ERR_INVALID_VARIABLE_GLOBAL;
9093+ pm_diagnostic_id_t diag_id = parser->version < = PM_OPTIONS_VERSION_CRUBY_3_3 ? PM_ERR_INVALID_VARIABLE_GLOBAL_3_3 : PM_ERR_INVALID_VARIABLE_GLOBAL;
90949094 PM_PARSER_ERR_TOKEN_FORMAT_CONTENT(parser, parser->current, diag_id);
90959095 }
90969096
@@ -9127,7 +9127,7 @@ lex_global_variable(pm_parser_t *parser) {
91279127 } else {
91289128 // If we get here, then we have a $ followed by something that
91299129 // isn't recognized as a global variable.
9130- pm_diagnostic_id_t diag_id = parser->version = = PM_OPTIONS_VERSION_CRUBY_3_3 ? PM_ERR_INVALID_VARIABLE_GLOBAL_3_3 : PM_ERR_INVALID_VARIABLE_GLOBAL;
9130+ pm_diagnostic_id_t diag_id = parser->version < = PM_OPTIONS_VERSION_CRUBY_3_3 ? PM_ERR_INVALID_VARIABLE_GLOBAL_3_3 : PM_ERR_INVALID_VARIABLE_GLOBAL;
91319131 const uint8_t *end = parser->current.end + parser->encoding->char_width(parser->current.end, parser->end - parser->current.end);
91329132 PM_PARSER_ERR_FORMAT(parser, parser->current.start, end, diag_id, (int) (end - parser->current.start), (const char *) parser->current.start);
91339133 }
@@ -10154,7 +10154,7 @@ lex_at_variable(pm_parser_t *parser) {
1015410154 }
1015510155 } else if (parser->current.end < end && pm_char_is_decimal_digit(*parser->current.end)) {
1015610156 pm_diagnostic_id_t diag_id = (type == PM_TOKEN_CLASS_VARIABLE) ? PM_ERR_INCOMPLETE_VARIABLE_CLASS : PM_ERR_INCOMPLETE_VARIABLE_INSTANCE;
10157- if (parser->version = = PM_OPTIONS_VERSION_CRUBY_3_3) {
10157+ if (parser->version < = PM_OPTIONS_VERSION_CRUBY_3_3) {
1015810158 diag_id = (type == PM_TOKEN_CLASS_VARIABLE) ? PM_ERR_INCOMPLETE_VARIABLE_CLASS_3_3 : PM_ERR_INCOMPLETE_VARIABLE_INSTANCE_3_3;
1015910159 }
1016010160
@@ -14644,7 +14644,7 @@ parse_parameters(
1464414644 parser_lex(parser);
1464514645
1464614646 pm_constant_id_t name_id = pm_parser_constant_id_token(parser, &name);
14647- uint32_t reads = parser->version = = PM_OPTIONS_VERSION_CRUBY_3_3 ? pm_locals_reads(&parser->current_scope->locals, name_id) : 0;
14647+ uint32_t reads = parser->version < = PM_OPTIONS_VERSION_CRUBY_3_3 ? pm_locals_reads(&parser->current_scope->locals, name_id) : 0;
1464814648
1464914649 if (accepts_blocks_in_defaults) pm_accepts_block_stack_push(parser, true);
1465014650 pm_node_t *value = parse_value_expression(parser, binding_power, false, false, PM_ERR_PARAMETER_NO_DEFAULT, (uint16_t) (depth + 1));
@@ -14660,7 +14660,7 @@ parse_parameters(
1466014660 // If the value of the parameter increased the number of
1466114661 // reads of that parameter, then we need to warn that we
1466214662 // have a circular definition.
14663- if ((parser->version = = PM_OPTIONS_VERSION_CRUBY_3_3) && (pm_locals_reads(&parser->current_scope->locals, name_id) != reads)) {
14663+ if ((parser->version < = PM_OPTIONS_VERSION_CRUBY_3_3) && (pm_locals_reads(&parser->current_scope->locals, name_id) != reads)) {
1466414664 PM_PARSER_ERR_TOKEN_FORMAT_CONTENT(parser, name, PM_ERR_PARAMETER_CIRCULAR);
1466514665 }
1466614666
@@ -14745,13 +14745,13 @@ parse_parameters(
1474514745
1474614746 if (token_begins_expression_p(parser->current.type)) {
1474714747 pm_constant_id_t name_id = pm_parser_constant_id_token(parser, &local);
14748- uint32_t reads = parser->version = = PM_OPTIONS_VERSION_CRUBY_3_3 ? pm_locals_reads(&parser->current_scope->locals, name_id) : 0;
14748+ uint32_t reads = parser->version < = PM_OPTIONS_VERSION_CRUBY_3_3 ? pm_locals_reads(&parser->current_scope->locals, name_id) : 0;
1474914749
1475014750 if (accepts_blocks_in_defaults) pm_accepts_block_stack_push(parser, true);
1475114751 pm_node_t *value = parse_value_expression(parser, binding_power, false, false, PM_ERR_PARAMETER_NO_DEFAULT_KW, (uint16_t) (depth + 1));
1475214752 if (accepts_blocks_in_defaults) pm_accepts_block_stack_pop(parser);
1475314753
14754- if (parser->version = = PM_OPTIONS_VERSION_CRUBY_3_3 && (pm_locals_reads(&parser->current_scope->locals, name_id) != reads)) {
14754+ if (parser->version < = PM_OPTIONS_VERSION_CRUBY_3_3 && (pm_locals_reads(&parser->current_scope->locals, name_id) != reads)) {
1475514755 PM_PARSER_ERR_TOKEN_FORMAT_CONTENT(parser, local, PM_ERR_PARAMETER_CIRCULAR);
1475614756 }
1475714757
@@ -16455,7 +16455,7 @@ parse_variable(pm_parser_t *parser) {
1645516455 pm_node_list_append(¤t_scope->implicit_parameters, node);
1645616456
1645716457 return node;
16458- } else if ((parser->version != PM_OPTIONS_VERSION_CRUBY_3_3 ) && pm_token_is_it(parser->previous.start, parser->previous.end)) {
16458+ } else if ((parser->version >= PM_OPTIONS_VERSION_CRUBY_3_4 ) && pm_token_is_it(parser->previous.start, parser->previous.end)) {
1645916459 pm_node_t *node = (pm_node_t *) pm_it_local_variable_read_node_create(parser, &parser->previous);
1646016460 pm_node_list_append(¤t_scope->implicit_parameters, node);
1646116461
@@ -22624,6 +22624,12 @@ pm_parser_init(pm_parser_t *parser, const uint8_t *source, size_t size, const pm
2262422624 }
2262522625 }
2262622626
22627+ // Now that we have established the user-provided options, check if
22628+ // a version was given and parse as the latest version otherwise.
22629+ if (parser->version == PM_OPTIONS_VERSION_UNSET) {
22630+ parser->version = PM_OPTIONS_VERSION_LATEST;
22631+ }
22632+
2262722633 pm_accepts_block_stack_push(parser, true);
2262822634
2262922635 // Skip past the UTF-8 BOM if it exists.
0 commit comments