From 3af56e87ca79740521c81e1336cfb5523f55ee29 Mon Sep 17 00:00:00 2001 From: TSUYUSATO Kitsune Date: Sun, 26 Nov 2023 16:47:41 +0900 Subject: [PATCH] [ruby/prism] Check void expressions for constant paths Fix https://github.com/ruby/prism/pull/1920 https://github.com/ruby/prism/commit/ee8e03bac7 --- prism/prism.c | 2 ++ test/prism/errors_test.rb | 14 ++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/prism/prism.c b/prism/prism.c index 27617f8f70..96ed3989e2 100644 --- a/prism/prism.c +++ b/prism/prism.c @@ -2457,6 +2457,8 @@ pm_constant_path_or_write_node_create(pm_parser_t *parser, pm_constant_path_node */ static pm_constant_path_node_t * pm_constant_path_node_create(pm_parser_t *parser, pm_node_t *parent, const pm_token_t *delimiter, pm_node_t *child) { + pm_assert_value_expression(parser, parent); + pm_constant_path_node_t *node = PM_ALLOC_NODE(parser, pm_constant_path_node_t); *node = (pm_constant_path_node_t) { diff --git a/test/prism/errors_test.rb b/test/prism/errors_test.rb index 82f50edd6e..3289f67a71 100644 --- a/test/prism/errors_test.rb +++ b/test/prism/errors_test.rb @@ -1654,6 +1654,7 @@ module Prism (return).(1) (return)[1] (return)[1] = 2 + (return)::foo RUBY message = 'Unexpected void value expression' assert_errors expression(source), source, [ @@ -1661,6 +1662,19 @@ module Prism [message, 14..20], [message, 27..33], [message, 39..45], + [message, 55..61], + ], compare_ripper: false # Ripper does not check 'void value expression'. + end + + def test_void_value_expression_in_constant_path + source = <<~RUBY + (return)::A + class (return)::A; end + RUBY + message = 'Unexpected void value expression' + assert_errors expression(source), source, [ + [message, 1..7], + [message, 19..25], ], compare_ripper: false # Ripper does not check 'void value expression'. end