diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-03-27 03:55:08 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-03-27 03:55:08 +0000 |
commit | 2ee07d60d43fa761b1ebb5e65350bafe34b124a5 (patch) | |
tree | 11ec861ad573f24223f0479012a6e11c93481868 /sprintf.c | |
parent | 326a45881a2266ee79fd01465a57175fb4b8d2b2 (diff) | |
download | ruby-2ee07d60d43fa761b1ebb5e65350bafe34b124a5.tar.gz |
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
Diffstat (limited to 'sprintf.c')
-rw-r--r-- | sprintf.c | 11 |
1 files changed, 2 insertions, 9 deletions
@@ -1034,7 +1034,7 @@ rb_str_format(int argc, const VALUE *argv, VALUE fmt) { VALUE val = GETARG(), num, den; int sign = (flags&FPLUS) ? 1 : 0, zero = 0; - long len, done = 0; + long len, done = blen; int prefix = 0; if (FIXNUM_P(val) || RB_TYPE_P(val, T_BIGNUM)) { den = INT2FIX(1); @@ -1077,39 +1077,32 @@ rb_str_format(int argc, const VALUE *argv, VALUE fmt) if (sign || (flags&FSPACE)) { buf[blen++] = sign > 0 ? '+' : sign < 0 ? '-' : ' '; prefix++; - done++; } len = RSTRING_LEN(val) + zero; t = RSTRING_PTR(val); if (len > prec) { memcpy(&buf[blen], t, len - prec); blen += len - prec; - done += len - prec; } else { buf[blen++] = '0'; - done++; } if (prec > 0) { buf[blen++] = '.'; - done++; } if (zero) { FILL('0', zero); - done += zero; } else if (prec > len) { FILL('0', prec - len); memcpy(&buf[blen], t, len); blen += len; - done += prec; } else if (prec > 0) { memcpy(&buf[blen], t + len - prec, prec); blen += prec; - done += prec; } - if ((flags & FWIDTH) && width > done) { + if ((flags & FWIDTH) && width > (done = blen - done)) { int fill = ' '; long shifting = 0; if (!(flags&FMINUS)) { |