From 80fec16cb6cade67f660c2190911431e70c2b9d8 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Mon, 8 Jul 2024 08:47:50 +0900 Subject: [PATCH] mruby-sprintf: inline sign_bits() function --- mrbgems/mruby-sprintf/src/sprintf.c | 41 +++++++++++------------------ 1 file changed, 16 insertions(+), 25 deletions(-) diff --git a/mrbgems/mruby-sprintf/src/sprintf.c b/mrbgems/mruby-sprintf/src/sprintf.c index 17dd0365c..3763e7c7f 100644 --- a/mrbgems/mruby-sprintf/src/sprintf.c +++ b/mrbgems/mruby-sprintf/src/sprintf.c @@ -43,26 +43,6 @@ remove_sign_bits(char *str, int base) return t; } -static char -sign_bits(int base, const char *p) -{ - char c; - - switch (base) { - case 16: - if (*p == 'X') c = 'F'; - else c = 'f'; - break; - case 8: - c = '7'; break; - case 2: - c = '1'; break; - default: - c = '.'; break; - } - return c; -} - static char * mrb_uint_to_cstr(char *buf, size_t len, mrb_int num, int base) { @@ -570,6 +550,7 @@ retry: const char *prefix = NULL; int sign = 0, dots = 0; char sc = 0; + char fc = 0; mrb_int v = 0; int base; int len; @@ -664,6 +645,15 @@ retry: } str_skip: + switch (base) { + case 16: + fc = 'f'; break; + case 8: + fc = '7'; break; + case 2: + fc = '1'; break; + } + if (*p == 'X') { char *pp = s; int c; @@ -671,6 +661,9 @@ retry: *pp = toupper(c); pp++; } + if (base == 16 && fc) { + fc = 'F'; + } } if (prefix && !prefix[1]) { /* octal */ @@ -724,9 +717,8 @@ retry: prec -= 2; width -= 2; PUSH("..", 2); - char c = sign_bits(base, p); - if (*s != c) { - FILL(c, 1); + if (*s != fc) { + FILL(fc, 1); prec--; width--; } } @@ -738,8 +730,7 @@ retry: FILL(c, prec - len); } else if (v < 0) { - char c = sign_bits(base, p); - FILL(c, prec - len); + FILL(fc, prec - len); } } PUSH(s, len);