From 70718d5935ed0ae96ac3c782330e1195114b6463 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Thu, 27 Mar 2014 13:33:14 +0900 Subject: an int literal may have multiple underscores inside --- src/string.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/string.c b/src/string.c index 0bee35d0e..439cb5409 100644 --- a/src/string.c +++ b/src/string.c @@ -1954,7 +1954,7 @@ mrb_cstr_to_inum(mrb_state *mrb, const char *str, int base, int badcheck) { const char *p; char sign = 1; - int c, us; + int c, uscore; unsigned long n = 0; mrb_int val; @@ -2042,14 +2042,14 @@ mrb_cstr_to_inum(mrb_state *mrb, const char *str, int base, int badcheck) break; } /* end of switch (base) { */ if (*str == '0') { /* squeeze preceeding 0s */ - us = 0; + uscore = 0; while ((c = *++str) == '0' || c == '_') { if (c == '_') { - if (++us >= 2) + if (++uscore >= 2) break; } else - us = 0; + uscore = 0; } if (!(c = *str) || ISSPACE(c)) --str; } @@ -2060,16 +2060,17 @@ mrb_cstr_to_inum(mrb_state *mrb, const char *str, int base, int badcheck) return mrb_fixnum_value(0); } - us = 0; + uscore = 0; for (p=str;*p;p++) { if (*p == '_') { - if (us == 0) { - us++; + if (uscore == 0) { + uscore++; continue; } if (badcheck) goto bad; break; } + uscore = 0; c = conv_digit(*p); if (c < 0 || c >= base) { if (badcheck) goto bad; -- cgit v1.2.3