Updated lifetime.d with a 32bit faster codepath for overflow checks.

This commit is contained in:
Tomas Lindquist Olsen
2009-03-03 19:47:39 +01:00
parent d845b11dbd
commit f84a2fb84a

View File

@@ -85,9 +85,20 @@ private
size_t length_adjust(size_t sizeelem, size_t newlength)
{
size_t newsize = sizeelem * newlength;
if (newsize / newlength != sizeelem)
onOutOfMemoryError();
size_t newsize = void;
static if (size_t.sizeof < ulong.sizeof)
{
ulong s = cast(ulong)sizeelem * cast(ulong)newlength;
if (s > size_t.max)
onOutOfMemoryError();
newsize = cast(size_t)s;
}
else
{
newsize = sizeelem * newlength;
if (newsize / newlength != sizeelem)
onOutOfMemoryError();
}
return newsize;
}
}