Fixed crash in std.format.doFormat

This commit is contained in:
Alexey Prokhin
2010-11-04 18:22:18 +03:00
parent 88d7b955c8
commit 45606689c5

View File

@@ -15,7 +15,7 @@ diff -U 3 -H -d -r -N -x '*.mak' -x tk -x backend -x debug -x release -x '*_pch.
}
diff -U 3 -H -d -r -N -x '*.mak' -x tk -x backend -x debug -x release -x '*_pch.h' -x Makefile -x '*.rej' -x '*~' -x '*.log' -x .svn -x '*pro.user' -x .directory -x cmake_install -x CMakeFiles -x .preprocessed.tmp -x 'Makefile.*' -x '*.orig' -- phobos-orig/std/conv.d phobos/std/conv.d
--- phobos-orig/std/conv.d 2010-09-17 00:27:48.000000000 +0400
+++ phobos/std/conv.d 2010-10-29 12:06:21.221035000 +0400
+++ phobos/std/conv.d 2010-11-04 13:24:59.758325002 +0300
@@ -1395,7 +1395,7 @@
else // not hex
{
@@ -37,6 +37,63 @@ diff -U 3 -H -d -r -N -x '*.mak' -x tk -x backend -x debug -x release -x '*_pch.
char[20] buffer;
int len = sprintf(buffer.ptr, "%g", d);
return to!T(buffer[0 .. len].dup);
diff -U 3 -H -d -r -N -x '*.mak' -x tk -x backend -x debug -x release -x '*_pch.h' -x Makefile -x '*.rej' -x '*~' -x '*.log' -x .svn -x '*pro.user' -x .directory -x cmake_install -x CMakeFiles -x .preprocessed.tmp -x 'Makefile.*' -x '*.orig' -- phobos-orig/std/format.d phobos/std/format.d
--- phobos-orig/std/format.d 2010-09-17 00:27:48.000000000 +0400
+++ phobos/std/format.d 2010-11-04 18:17:53.483219002 +0300
@@ -2531,20 +2531,42 @@
FLprecision = 0x80,
}
- static TypeInfo skipCI(TypeInfo valti)
+ version(LDC)
{
- for (;;)
+ static TypeInfo skipCI(TypeInfo valti)
{
- if (valti.classinfo.name.length == 18 &&
- valti.classinfo.name[9..18] == "Invariant")
- valti = (cast(TypeInfo_Invariant)valti).next;
- else if (valti.classinfo.name.length == 14 &&
- valti.classinfo.name[9..14] == "Const")
- valti = (cast(TypeInfo_Const)valti).next;
- else
- break;
+ for (;;)
+ {
+ if (valti.classinfo.name.length == 18 &&
+ valti.classinfo.name[9..18] == "Invariant")
+ valti = (cast(TypeInfo_Invariant)valti).base;
+ else if (valti.classinfo.name.length == 14 &&
+ valti.classinfo.name[9..14] == "Const")
+ valti = (cast(TypeInfo_Const)valti).base;
+ else
+ break;
+ }
+ return valti;
+ }
+
+ }
+ else
+ {
+ static TypeInfo skipCI(TypeInfo valti)
+ {
+ for (;;)
+ {
+ if (valti.classinfo.name.length == 18 &&
+ valti.classinfo.name[9..18] == "Invariant")
+ valti = (cast(TypeInfo_Invariant)valti).next;
+ else if (valti.classinfo.name.length == 14 &&
+ valti.classinfo.name[9..14] == "Const")
+ valti = (cast(TypeInfo_Const)valti).next;
+ else
+ break;
+ }
+ return valti;
}
- return valti;
}
void formatArg(char fc)
diff -U 3 -H -d -r -N -x '*.mak' -x tk -x backend -x debug -x release -x '*_pch.h' -x Makefile -x '*.rej' -x '*~' -x '*.log' -x .svn -x '*pro.user' -x .directory -x cmake_install -x CMakeFiles -x .preprocessed.tmp -x 'Makefile.*' -x '*.orig' -- phobos-orig/std/functional.d phobos/std/functional.d
--- phobos-orig/std/functional.d 2010-09-17 00:27:48.000000000 +0400
+++ phobos/std/functional.d 2010-10-29 12:01:35.285035001 +0400