diff --git a/lib/prism/node_ext.rb b/lib/prism/node_ext.rb index 8c09632345..974052e84b 100644 --- a/lib/prism/node_ext.rb +++ b/lib/prism/node_ext.rb @@ -81,7 +81,7 @@ module Prism class RationalNode < Node # Returns the value of the node as a Ruby Rational. def value - Rational(slice.chomp("r")) + Rational(numeric.is_a?(IntegerNode) && !numeric.decimal? ? numeric.value : slice.chomp("r")) end end diff --git a/test/prism/ruby_api_test.rb b/test/prism/ruby_api_test.rb index 7bb80b481a..cf7ea437cf 100644 --- a/test/prism/ruby_api_test.rb +++ b/test/prism/ruby_api_test.rb @@ -57,6 +57,8 @@ module Prism assert_equal 0.5r, parse_expression("0.5r").value assert_equal 42ri, parse_expression("42ri").value assert_equal 0.5ri, parse_expression("0.5ri").value + assert_equal 0xFFr, parse_expression("0xFFr").value + assert_equal 0xFFri, parse_expression("0xFFri").value end def test_location_join