From 4aa6e824bb30965bdbd35d46e3e458b7000bc62d Mon Sep 17 00:00:00 2001 From: Ary Borenszweig <aborenszweig@manas.com.ar> Date: Wed, 29 Oct 2014 18:10:03 -0300 Subject: [PATCH] Fixed an issue with uint64 parsing --- spec/compiler/lexer/lexer_spec.cr | 1 + src/compiler/crystal/syntax/lexer.cr | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/spec/compiler/lexer/lexer_spec.cr b/spec/compiler/lexer/lexer_spec.cr index 3bcbb1c536..cc23045224 100755 --- a/spec/compiler/lexer/lexer_spec.cr +++ b/spec/compiler/lexer/lexer_spec.cr @@ -184,6 +184,7 @@ describe "Lexer" do it_lexes_i64 ["2147483648", "-2147483649", "-9223372036854775808"] it_lexes_u64 ["9223372036854775808", "-9223372036854775809"] + it_lexes_u64 ["18446744073709551615", "18446744073709551615", "14146167139683460000"] it_lexes_char "'a'", 'a' it_lexes_char "'\\b'", 8.chr diff --git a/src/compiler/crystal/syntax/lexer.cr b/src/compiler/crystal/syntax/lexer.cr index a94d8d81b6..7ac78b3d51 100644 --- a/src/compiler/crystal/syntax/lexer.cr +++ b/src/compiler/crystal/syntax/lexer.cr @@ -1138,8 +1138,11 @@ module Crystal if num_length == 20 i = 0 "18446744073709551615".each_byte do |byte| - if string_value.byte_at(i) > byte + string_byte = string_value.byte_at(i) + if string_byte > byte raise_value_doesnt_fit_in_uint64 string_value, start + elsif string_byte < byte + break end i += 1 end -- GitLab