lib/core: handling of plus (+) sign when using to_i with Text objects
authorHugo Leblanc <dullin@hololink.org>
Fri, 28 Dec 2018 17:27:50 +0000 (12:27 -0500)
committerHugo Leblanc <dullin@hololink.org>
Fri, 28 Dec 2018 18:19:35 +0000 (13:19 -0500)
Signed-off-by: Hugo Leblanc <dullin@hololink.org>

lib/core/text/abstract_text.nit
lib/core/text/fixed_ints_text.nit

index fbe045f..06989ef 100644 (file)
@@ -253,6 +253,7 @@ abstract class Text
        # assert "0x64".to_i       == 100
        # assert "0b1100_0011".to_i== 195
        # assert "--12".to_i       == 12
+       # assert "+45".to_i        == 45
        # ~~~
        #
        # REQUIRE: `self`.`is_int`
index c738f91..89f6553 100644 (file)
@@ -208,6 +208,8 @@ redef class Text
        #
        #     assert "123".is_int
        #     assert "0b1011".is_int
+       #     assert "-34".is_int
+       #     assert "+45".is_int
        #     assert not "0x_".is_int
        #     assert not "0xGE".is_int
        #     assert not "".is_int
@@ -218,7 +220,7 @@ redef class Text
                var s = remove_all('_')
                var pos = 0
                var len = s.length
-               while pos < len and s[pos] == '-' do
+               while pos < len and (s[pos] == '-' or s[pos] == '+') do
                        pos += 1
                end
                s = s.substring_from(pos)
@@ -238,9 +240,15 @@ redef class Text
                var val = 0
                var neg = false
                var pos = 0
-               while s[pos] == '-' do
-                       neg = not neg
-                       pos += 1
+               loop
+                       if s[pos] == '-' then
+                               neg = not neg
+                               pos += 1
+                       else if s[pos] == '+' then
+                               pos += 1
+                       else
+                               break
+                       end
                end
                s = s.substring_from(pos)
                if s.length >= 2 then