зеркало из https://github.com/github/ruby.git
sprintf.c: use FILL
* sprintf.c (rb_str_format): use FILL and FILL_ macros instead of while loop. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58021 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
d8bf178531
Коммит
f30ed02b8a
37
sprintf.c
37
sprintf.c
|
@ -74,6 +74,7 @@ sign_bits(int base, const char *p)
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define FILL(c, l) do { \
|
#define FILL(c, l) do { \
|
||||||
|
if ((l) <= 0) break;\
|
||||||
CHECK(l);\
|
CHECK(l);\
|
||||||
FILL_(c, l);\
|
FILL_(c, l);\
|
||||||
} while (0)
|
} while (0)
|
||||||
|
@ -758,20 +759,15 @@ rb_str_format(int argc, const VALUE *argv, VALUE fmt)
|
||||||
if ((flags&FWIDTH) && (width > slen)) {
|
if ((flags&FWIDTH) && (width > slen)) {
|
||||||
width -= (int)slen;
|
width -= (int)slen;
|
||||||
if (!(flags&FMINUS)) {
|
if (!(flags&FMINUS)) {
|
||||||
CHECK(width);
|
FILL(' ', width);
|
||||||
while (width--) {
|
width = 0;
|
||||||
buf[blen++] = ' ';
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
CHECK(len);
|
CHECK(len);
|
||||||
memcpy(&buf[blen], RSTRING_PTR(str), len);
|
memcpy(&buf[blen], RSTRING_PTR(str), len);
|
||||||
RB_GC_GUARD(str);
|
RB_GC_GUARD(str);
|
||||||
blen += len;
|
blen += len;
|
||||||
if (flags&FMINUS) {
|
if (flags&FMINUS) {
|
||||||
CHECK(width);
|
FILL(' ', width);
|
||||||
while (width--) {
|
|
||||||
buf[blen++] = ' ';
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
rb_enc_associate(result, enc);
|
rb_enc_associate(result, enc);
|
||||||
break;
|
break;
|
||||||
|
@ -1009,10 +1005,8 @@ rb_str_format(int argc, const VALUE *argv, VALUE fmt)
|
||||||
width -= prec;
|
width -= prec;
|
||||||
}
|
}
|
||||||
if (!(flags&FMINUS)) {
|
if (!(flags&FMINUS)) {
|
||||||
CHECK(width);
|
FILL(' ', width);
|
||||||
while (width-- > 0) {
|
width = 0;
|
||||||
buf[blen++] = ' ';
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (sc) PUSH(&sc, 1);
|
if (sc) PUSH(&sc, 1);
|
||||||
if (prefix) {
|
if (prefix) {
|
||||||
|
@ -1021,23 +1015,18 @@ rb_str_format(int argc, const VALUE *argv, VALUE fmt)
|
||||||
}
|
}
|
||||||
CHECK(prec - len);
|
CHECK(prec - len);
|
||||||
if (dots) PUSH("..", 2);
|
if (dots) PUSH("..", 2);
|
||||||
if (!sign && valsign < 0) {
|
if (prec > len) {
|
||||||
char c = sign_bits(base, p);
|
if (!sign && valsign < 0) {
|
||||||
while (len < prec--) {
|
char c = sign_bits(base, p);
|
||||||
buf[blen++] = c;
|
FILL_(c, prec - len);
|
||||||
}
|
}
|
||||||
}
|
else if ((flags & (FMINUS|FPREC)) != FMINUS) {
|
||||||
else if ((flags & (FMINUS|FPREC)) != FMINUS) {
|
FILL_('0', prec - len);
|
||||||
while (len < prec--) {
|
|
||||||
buf[blen++] = '0';
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
PUSH(s, len);
|
PUSH(s, len);
|
||||||
RB_GC_GUARD(tmp);
|
RB_GC_GUARD(tmp);
|
||||||
CHECK(width);
|
FILL(' ', width);
|
||||||
while (width-- > 0) {
|
|
||||||
buf[blen++] = ' ';
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче