@@ -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) {
@@ -9113,7 +9113,7 @@ lex_global_variable(pm_parser_t *parser) {
91139113 } while ((width = char_is_identifier(parser, parser->current.end, parser->end - parser->current.end)) > 0);
91149114
91159115 // $0 isn't allowed to be followed by anything.
9116- 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;
9116+ 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;
91179117 PM_PARSER_ERR_TOKEN_FORMAT_CONTENT(parser, parser->current, diag_id);
91189118 }
91199119
@@ -9150,7 +9150,7 @@ lex_global_variable(pm_parser_t *parser) {
91509150 } else {
91519151 // If we get here, then we have a $ followed by something that
91529152 // isn't recognized as a global variable.
9153- 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;
9153+ 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;
91549154 const uint8_t *end = parser->current.end + parser->encoding->char_width(parser->current.end, parser->end - parser->current.end);
91559155 PM_PARSER_ERR_FORMAT(parser, parser->current.start, end, diag_id, (int) (end - parser->current.start), (const char *) parser->current.start);
91569156 }
@@ -10177,7 +10177,7 @@ lex_at_variable(pm_parser_t *parser) {
1017710177 }
1017810178 } else if (parser->current.end < end && pm_char_is_decimal_digit(*parser->current.end)) {
1017910179 pm_diagnostic_id_t diag_id = (type == PM_TOKEN_CLASS_VARIABLE) ? PM_ERR_INCOMPLETE_VARIABLE_CLASS : PM_ERR_INCOMPLETE_VARIABLE_INSTANCE;
10180- if (parser->version = = PM_OPTIONS_VERSION_CRUBY_3_3) {
10180+ if (parser->version < = PM_OPTIONS_VERSION_CRUBY_3_3) {
1018110181 diag_id = (type == PM_TOKEN_CLASS_VARIABLE) ? PM_ERR_INCOMPLETE_VARIABLE_CLASS_3_3 : PM_ERR_INCOMPLETE_VARIABLE_INSTANCE_3_3;
1018210182 }
1018310183
@@ -14667,7 +14667,7 @@ parse_parameters(
1466714667 parser_lex(parser);
1466814668
1466914669 pm_constant_id_t name_id = pm_parser_constant_id_token(parser, &name);
14670- uint32_t reads = parser->version = = PM_OPTIONS_VERSION_CRUBY_3_3 ? pm_locals_reads(&parser->current_scope->locals, name_id) : 0;
14670+ uint32_t reads = parser->version < = PM_OPTIONS_VERSION_CRUBY_3_3 ? pm_locals_reads(&parser->current_scope->locals, name_id) : 0;
1467114671
1467214672 if (accepts_blocks_in_defaults) pm_accepts_block_stack_push(parser, true);
1467314673 pm_node_t *value = parse_value_expression(parser, binding_power, false, false, PM_ERR_PARAMETER_NO_DEFAULT, (uint16_t) (depth + 1));
@@ -14683,7 +14683,7 @@ parse_parameters(
1468314683 // If the value of the parameter increased the number of
1468414684 // reads of that parameter, then we need to warn that we
1468514685 // have a circular definition.
14686- if ((parser->version = = PM_OPTIONS_VERSION_CRUBY_3_3) && (pm_locals_reads(&parser->current_scope->locals, name_id) != reads)) {
14686+ if ((parser->version < = PM_OPTIONS_VERSION_CRUBY_3_3) && (pm_locals_reads(&parser->current_scope->locals, name_id) != reads)) {
1468714687 PM_PARSER_ERR_TOKEN_FORMAT_CONTENT(parser, name, PM_ERR_PARAMETER_CIRCULAR);
1468814688 }
1468914689
@@ -14768,13 +14768,13 @@ parse_parameters(
1476814768
1476914769 if (token_begins_expression_p(parser->current.type)) {
1477014770 pm_constant_id_t name_id = pm_parser_constant_id_token(parser, &local);
14771- uint32_t reads = parser->version = = PM_OPTIONS_VERSION_CRUBY_3_3 ? pm_locals_reads(&parser->current_scope->locals, name_id) : 0;
14771+ uint32_t reads = parser->version < = PM_OPTIONS_VERSION_CRUBY_3_3 ? pm_locals_reads(&parser->current_scope->locals, name_id) : 0;
1477214772
1477314773 if (accepts_blocks_in_defaults) pm_accepts_block_stack_push(parser, true);
1477414774 pm_node_t *value = parse_value_expression(parser, binding_power, false, false, PM_ERR_PARAMETER_NO_DEFAULT_KW, (uint16_t) (depth + 1));
1477514775 if (accepts_blocks_in_defaults) pm_accepts_block_stack_pop(parser);
1477614776
14777- if (parser->version = = PM_OPTIONS_VERSION_CRUBY_3_3 && (pm_locals_reads(&parser->current_scope->locals, name_id) != reads)) {
14777+ if (parser->version < = PM_OPTIONS_VERSION_CRUBY_3_3 && (pm_locals_reads(&parser->current_scope->locals, name_id) != reads)) {
1477814778 PM_PARSER_ERR_TOKEN_FORMAT_CONTENT(parser, local, PM_ERR_PARAMETER_CIRCULAR);
1477914779 }
1478014780
@@ -16478,7 +16478,7 @@ parse_variable(pm_parser_t *parser) {
1647816478 pm_node_list_append(¤t_scope->implicit_parameters, node);
1647916479
1648016480 return node;
16481- } else if ((parser->version != PM_OPTIONS_VERSION_CRUBY_3_3 ) && pm_token_is_it(parser->previous.start, parser->previous.end)) {
16481+ } else if ((parser->version >= PM_OPTIONS_VERSION_CRUBY_3_4 ) && pm_token_is_it(parser->previous.start, parser->previous.end)) {
1648216482 pm_node_t *node = (pm_node_t *) pm_it_local_variable_read_node_create(parser, &parser->previous);
1648316483 pm_node_list_append(¤t_scope->implicit_parameters, node);
1648416484
@@ -22641,6 +22641,12 @@ pm_parser_init(pm_parser_t *parser, const uint8_t *source, size_t size, const pm
2264122641 }
2264222642 }
2264322643
22644+ // Now that we have established the user-provided options, check if
22645+ // a version was given and parse as the latest version otherwise.
22646+ if (parser->version == PM_OPTIONS_VERSION_UNSET) {
22647+ parser->version = PM_OPTIONS_VERSION_LATEST;
22648+ }
22649+
2264422650 pm_accepts_block_stack_push(parser, true);
2264522651
2264622652 // Skip past the UTF-8 BOM if it exists.
0 commit comments