1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

sprintf.c: simplify

* sprintf.c (rb_str_format): remove repeated calculations.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54303 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2016-03-27 03:55:08 +00:00
parent ee2f3c6def
commit d1e2d6a9c5

View file

@ -1034,7 +1034,7 @@ rb_str_format(int argc, const VALUE *argv, VALUE fmt)
{ {
VALUE val = GETARG(), num, den; VALUE val = GETARG(), num, den;
int sign = (flags&FPLUS) ? 1 : 0, zero = 0; int sign = (flags&FPLUS) ? 1 : 0, zero = 0;
long len, done = 0; long len, done = blen;
int prefix = 0; int prefix = 0;
if (FIXNUM_P(val) || RB_TYPE_P(val, T_BIGNUM)) { if (FIXNUM_P(val) || RB_TYPE_P(val, T_BIGNUM)) {
den = INT2FIX(1); den = INT2FIX(1);
@ -1077,39 +1077,32 @@ rb_str_format(int argc, const VALUE *argv, VALUE fmt)
if (sign || (flags&FSPACE)) { if (sign || (flags&FSPACE)) {
buf[blen++] = sign > 0 ? '+' : sign < 0 ? '-' : ' '; buf[blen++] = sign > 0 ? '+' : sign < 0 ? '-' : ' ';
prefix++; prefix++;
done++;
} }
len = RSTRING_LEN(val) + zero; len = RSTRING_LEN(val) + zero;
t = RSTRING_PTR(val); t = RSTRING_PTR(val);
if (len > prec) { if (len > prec) {
memcpy(&buf[blen], t, len - prec); memcpy(&buf[blen], t, len - prec);
blen += len - prec; blen += len - prec;
done += len - prec;
} }
else { else {
buf[blen++] = '0'; buf[blen++] = '0';
done++;
} }
if (prec > 0) { if (prec > 0) {
buf[blen++] = '.'; buf[blen++] = '.';
done++;
} }
if (zero) { if (zero) {
FILL('0', zero); FILL('0', zero);
done += zero;
} }
else if (prec > len) { else if (prec > len) {
FILL('0', prec - len); FILL('0', prec - len);
memcpy(&buf[blen], t, len); memcpy(&buf[blen], t, len);
blen += len; blen += len;
done += prec;
} }
else if (prec > 0) { else if (prec > 0) {
memcpy(&buf[blen], t + len - prec, prec); memcpy(&buf[blen], t + len - prec, prec);
blen += prec; blen += prec;
done += prec;
} }
if ((flags & FWIDTH) && width > done) { if ((flags & FWIDTH) && width > (done = blen - done)) {
int fill = ' '; int fill = ' ';
long shifting = 0; long shifting = 0;
if (!(flags&FMINUS)) { if (!(flags&FMINUS)) {