tanya.format: Cast lookup array index to size_t

This commit is contained in:
Eugen Wissner 2017-08-30 12:20:42 +02:00
parent d946b598fd
commit 617eaab9a2

View File

@ -570,10 +570,10 @@ pure nothrow @nogc
++f; ++f;
// ok, we have a percent, read the modifiers first // ok, we have a percent, read the modifiers first
uint fw = 0; int fw = 0;
uint pr = -1; int pr = -1;
uint fl = 0;
int tz = 0; int tz = 0;
uint fl = 0;
// flags // flags
for (;;) for (;;)
@ -699,7 +699,10 @@ pure nothrow @nogc
// are we 64-bit on size_t or ptrdiff_t? (c99) // are we 64-bit on size_t or ptrdiff_t? (c99)
case 'z': case 'z':
case 't': case 't':
fl |= ((char*).sizeof == 8) ? Modifier.intMax : 0; static if (size_t.sizeof == 8)
{
fl |= Modifier.intMax;
}
++f; ++f;
break; break;
// are we 64-bit (msft style) // are we 64-bit (msft style)
@ -715,7 +718,10 @@ pure nothrow @nogc
} }
else else
{ {
fl |= ((void*).sizeof == 8) ? Modifier.intMax : 0; static if (size_t.sizeof == 8)
{
fl |= Modifier.intMax;
}
++f; ++f;
} }
break; break;
@ -1300,7 +1306,10 @@ pure nothrow @nogc
goto radixnum; goto radixnum;
case 'p': // pointer case 'p': // pointer
fl |= ((void*).sizeof == 8) ? Modifier.intMax : 0; static if (size_t.sizeof == 8)
{
fl |= Modifier.intMax;
}
pr = (void*).sizeof * 2; pr = (void*).sizeof * 2;
fl &= ~Modifier.leadingZero; // 'p' only prints the pointer with zeros fl &= ~Modifier.leadingZero; // 'p' only prints the pointer with zeros
// drop through to X // drop through to X
@ -1345,7 +1354,7 @@ pure nothrow @nogc
// convert to string // convert to string
for (;;) for (;;)
{ {
*--s = h[n64 & ((1 << (l >> 8)) - 1)]; *--s = h[cast(size_t) (n64 & ((1 << (l >> 8)) - 1))];
n64 >>= (l >> 8); n64 >>= (l >> 8);
if (!((n64) || (cast(int) ((num.ptr + NUMSZ) - s) < pr))) if (!((n64) || (cast(int) ((num.ptr + NUMSZ) - s) < pr)))
{ {
@ -1732,11 +1741,23 @@ nothrow
return result; return result;
} }
// Converting a floating point to string.
private nothrow unittest private nothrow unittest
{ {
char[318] buffer; char[318] buffer;
// Format without arguments.
assert(format(buffer, "") == "");
assert(format(buffer, "asdfqweryxcvz") == "asdfqweryxcvz");
// Modifiers.
assert(format(buffer, "%-5g", 8.5) == "8.5 ");
assert(format(buffer, "%05g", 8.6) == "008.6");
assert(format(buffer, "%+d", 8) == "+8");
// Integer conversions.
assert(format(buffer, "%d", 8) == "8");
// Floating point conversions.
assert(format(buffer, "%g", 0.1234) == "0.1234"); assert(format(buffer, "%g", 0.1234) == "0.1234");
assert(format(buffer, "%g", 0.3) == "0.3"); assert(format(buffer, "%g", 0.3) == "0.3");
assert(format(buffer, "%g", 0.333333333333) == "0.333333"); assert(format(buffer, "%g", 0.333333333333) == "0.333333");