diff options
| author | TSUYUSATO Kitsune <make.just.on@gmail.com> | 2023-12-15 01:30:22 +0900 |
|---|---|---|
| committer | git <svn-admin@ruby-lang.org> | 2023-12-14 16:39:05 +0000 |
| commit | 3658798dbb60fe55beaebc157ba43c8fe617c4a0 (patch) | |
| tree | 366c4586c988bcb6e25c922dec53c3fca97bca14 | |
| parent | 8e1c148fd90b2c32044ef310a0a312bca89c6fea (diff) | |
[ruby/prism] Make equality operators non-associative
Fix https://github.com/ruby/prism/pull/2073
https://github.com/ruby/prism/commit/0f747d9240
| -rw-r--r-- | prism/prism.c | 12 | ||||
| -rw-r--r-- | test/prism/errors_test.rb | 27 |
2 files changed, 33 insertions, 6 deletions
diff --git a/prism/prism.c b/prism/prism.c index dfb1affa88..14bd5542fc 100644 --- a/prism/prism.c +++ b/prism/prism.c @@ -10287,12 +10287,12 @@ pm_binding_powers_t pm_binding_powers[PM_TOKEN_MAXIMUM] = { [PM_TOKEN_AMPERSAND_AMPERSAND] = LEFT_ASSOCIATIVE(PM_BINDING_POWER_LOGICAL_AND), // != !~ == === =~ <=> - [PM_TOKEN_BANG_EQUAL] = LEFT_ASSOCIATIVE(PM_BINDING_POWER_EQUALITY), - [PM_TOKEN_BANG_TILDE] = LEFT_ASSOCIATIVE(PM_BINDING_POWER_EQUALITY), - [PM_TOKEN_EQUAL_EQUAL] = LEFT_ASSOCIATIVE(PM_BINDING_POWER_EQUALITY), - [PM_TOKEN_EQUAL_EQUAL_EQUAL] = LEFT_ASSOCIATIVE(PM_BINDING_POWER_EQUALITY), - [PM_TOKEN_EQUAL_TILDE] = LEFT_ASSOCIATIVE(PM_BINDING_POWER_EQUALITY), - [PM_TOKEN_LESS_EQUAL_GREATER] = LEFT_ASSOCIATIVE(PM_BINDING_POWER_EQUALITY), + [PM_TOKEN_BANG_EQUAL] = NON_ASSOCIATIVE(PM_BINDING_POWER_EQUALITY), + [PM_TOKEN_BANG_TILDE] = NON_ASSOCIATIVE(PM_BINDING_POWER_EQUALITY), + [PM_TOKEN_EQUAL_EQUAL] = NON_ASSOCIATIVE(PM_BINDING_POWER_EQUALITY), + [PM_TOKEN_EQUAL_EQUAL_EQUAL] = NON_ASSOCIATIVE(PM_BINDING_POWER_EQUALITY), + [PM_TOKEN_EQUAL_TILDE] = NON_ASSOCIATIVE(PM_BINDING_POWER_EQUALITY), + [PM_TOKEN_LESS_EQUAL_GREATER] = NON_ASSOCIATIVE(PM_BINDING_POWER_EQUALITY), // > >= < <= [PM_TOKEN_GREATER] = LEFT_ASSOCIATIVE(PM_BINDING_POWER_COMPARISON), diff --git a/test/prism/errors_test.rb b/test/prism/errors_test.rb index e11a7bdc82..51ac7bc5cf 100644 --- a/test/prism/errors_test.rb +++ b/test/prism/errors_test.rb @@ -2004,6 +2004,33 @@ module Prism ] end + def test_non_assoc_equality + source = <<~RUBY + 1 == 2 == 3 + 1 != 2 != 3 + 1 === 2 === 3 + 1 =~ 2 =~ 3 + 1 !~ 2 !~ 3 + 1 <=> 2 <=> 3 + RUBY + message1 = 'expected a newline or semicolon after the statement' + message2 = 'cannot parse the expression' + assert_errors expression(source), source, [ + [message1, 6..6], + [message2, 6..6], + [message1, 18..18], + [message2, 18..18], + [message1, 31..31], + [message2, 31..31], + [message1, 44..44], + [message2, 44..44], + [message1, 56..56], + [message2, 56..56], + [message1, 69..69], + [message2, 69..69], + ] + end + private def assert_errors(expected, source, errors, compare_ripper: RUBY_ENGINE == "ruby") |
