mirror of
https://github.com/dlang/phobos.git
synced 2025-04-27 13:40:20 +03:00
Win64 fixes
This commit is contained in:
parent
2346ef9a68
commit
18f7d60f0d
3 changed files with 49 additions and 17 deletions
15
std/format.d
15
std/format.d
|
@ -30,7 +30,7 @@ version(unittest) {
|
||||||
import core.exception;
|
import core.exception;
|
||||||
}
|
}
|
||||||
|
|
||||||
version (Windows) version (DigitalMars)
|
version (Win32) version (DigitalMars)
|
||||||
{
|
{
|
||||||
version = DigitalMarsC;
|
version = DigitalMarsC;
|
||||||
}
|
}
|
||||||
|
@ -4656,6 +4656,8 @@ void doFormat(void delegate(dchar) putc, TypeInfo[] arguments, va_list argptr)
|
||||||
//doFormat(putc, (&valti)[0 .. 1], p);
|
//doFormat(putc, (&valti)[0 .. 1], p);
|
||||||
version(X86)
|
version(X86)
|
||||||
argptr = p;
|
argptr = p;
|
||||||
|
else version(Win64)
|
||||||
|
argptr = p;
|
||||||
else version(X86_64)
|
else version(X86_64)
|
||||||
{
|
{
|
||||||
__va_list va;
|
__va_list va;
|
||||||
|
@ -4706,6 +4708,8 @@ void doFormat(void delegate(dchar) putc, TypeInfo[] arguments, va_list argptr)
|
||||||
//doFormat(putc, (&keyti)[0..1], pkey);
|
//doFormat(putc, (&keyti)[0..1], pkey);
|
||||||
version (X86)
|
version (X86)
|
||||||
argptr = pkey;
|
argptr = pkey;
|
||||||
|
else version (Win64)
|
||||||
|
argptr = pkey;
|
||||||
else version (X86_64)
|
else version (X86_64)
|
||||||
{ __va_list va;
|
{ __va_list va;
|
||||||
va.stack_args = pkey;
|
va.stack_args = pkey;
|
||||||
|
@ -4721,6 +4725,8 @@ void doFormat(void delegate(dchar) putc, TypeInfo[] arguments, va_list argptr)
|
||||||
//doFormat(putc, (&valti)[0..1], pvalue);
|
//doFormat(putc, (&valti)[0..1], pvalue);
|
||||||
version (X86)
|
version (X86)
|
||||||
argptr = pvalue;
|
argptr = pvalue;
|
||||||
|
else version (Win64)
|
||||||
|
argptr = pvalue;
|
||||||
else version (X86_64)
|
else version (X86_64)
|
||||||
{ __va_list va2;
|
{ __va_list va2;
|
||||||
va2.stack_args = pvalue;
|
va2.stack_args = pvalue;
|
||||||
|
@ -4874,6 +4880,8 @@ void doFormat(void delegate(dchar) putc, TypeInfo[] arguments, va_list argptr)
|
||||||
case Mangle.Tsarray:
|
case Mangle.Tsarray:
|
||||||
version (X86)
|
version (X86)
|
||||||
putArray(argptr, (cast(TypeInfo_StaticArray)ti).len, cast()(cast(TypeInfo_StaticArray)ti).next);
|
putArray(argptr, (cast(TypeInfo_StaticArray)ti).len, cast()(cast(TypeInfo_StaticArray)ti).next);
|
||||||
|
else version (Win64)
|
||||||
|
putArray(argptr, (cast(TypeInfo_StaticArray)ti).len, cast()(cast(TypeInfo_StaticArray)ti).next);
|
||||||
else
|
else
|
||||||
putArray((cast(__va_list*)argptr).stack_args, (cast(TypeInfo_StaticArray)ti).len, cast()(cast(TypeInfo_StaticArray)ti).next);
|
putArray((cast(__va_list*)argptr).stack_args, (cast(TypeInfo_StaticArray)ti).len, cast()(cast(TypeInfo_StaticArray)ti).next);
|
||||||
return;
|
return;
|
||||||
|
@ -4973,6 +4981,11 @@ void doFormat(void delegate(dchar) putc, TypeInfo[] arguments, va_list argptr)
|
||||||
s = tis.xtoString(argptr);
|
s = tis.xtoString(argptr);
|
||||||
argptr += (tis.tsize() + 3) & ~3;
|
argptr += (tis.tsize() + 3) & ~3;
|
||||||
}
|
}
|
||||||
|
else version(Win64)
|
||||||
|
{
|
||||||
|
s = tis.xtoString(argptr);
|
||||||
|
argptr += (tis.tsize() + 3) & ~3;
|
||||||
|
}
|
||||||
else version (X86_64)
|
else version (X86_64)
|
||||||
{
|
{
|
||||||
void[32] parmn = void; // place to copy struct if passed in regs
|
void[32] parmn = void; // place to copy struct if passed in regs
|
||||||
|
|
|
@ -262,7 +262,7 @@ class OutBuffer
|
||||||
auto psize = buffer.length;
|
auto psize = buffer.length;
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
version(Win32)
|
version(Windows)
|
||||||
{
|
{
|
||||||
count = _vsnprintf(p,psize,f,args);
|
count = _vsnprintf(p,psize,f,args);
|
||||||
if (count != -1)
|
if (count != -1)
|
||||||
|
@ -270,7 +270,7 @@ class OutBuffer
|
||||||
psize *= 2;
|
psize *= 2;
|
||||||
p = cast(char *) alloca(psize); // buffer too small, try again with larger size
|
p = cast(char *) alloca(psize); // buffer too small, try again with larger size
|
||||||
}
|
}
|
||||||
version(Posix)
|
else version(Posix)
|
||||||
{
|
{
|
||||||
count = vsnprintf(p,psize,f,args);
|
count = vsnprintf(p,psize,f,args);
|
||||||
if (count == -1)
|
if (count == -1)
|
||||||
|
@ -286,6 +286,10 @@ class OutBuffer
|
||||||
+/
|
+/
|
||||||
p = cast(char *) alloca(psize); // buffer too small, try again with larger size
|
p = cast(char *) alloca(psize); // buffer too small, try again with larger size
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
static assert(0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
write(cast(ubyte[]) p[0 .. count]);
|
write(cast(ubyte[]) p[0 .. count]);
|
||||||
/+
|
/+
|
||||||
|
@ -301,21 +305,29 @@ class OutBuffer
|
||||||
* Append output of C's printf() to internal buffer.
|
* Append output of C's printf() to internal buffer.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
version (X86_64)
|
|
||||||
void printf(string format, ...)
|
void printf(string format, ...)
|
||||||
{
|
{
|
||||||
va_list ap;
|
version (Win64)
|
||||||
va_start(ap, __va_argsave);
|
{
|
||||||
vprintf(format, ap);
|
va_list ap;
|
||||||
va_end(ap);
|
ap = cast(va_list)&format;
|
||||||
}
|
ap += format.sizeof;
|
||||||
else
|
vprintf(format, ap);
|
||||||
void printf(string format, ...)
|
}
|
||||||
{
|
else version (X86_64)
|
||||||
va_list ap;
|
{
|
||||||
ap = cast(va_list)&format;
|
va_list ap;
|
||||||
ap += format.sizeof;
|
va_start(ap, __va_argsave);
|
||||||
vprintf(format, ap);
|
vprintf(format, ap);
|
||||||
|
va_end(ap);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
va_list ap;
|
||||||
|
ap = cast(va_list)&format;
|
||||||
|
ap += format.sizeof;
|
||||||
|
vprintf(format, ap);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************
|
/*****************************************
|
||||||
|
|
|
@ -1164,7 +1164,14 @@ class Stream : InputStream, OutputStream {
|
||||||
|
|
||||||
// writes data to stream using printf() syntax,
|
// writes data to stream using printf() syntax,
|
||||||
// returns number of bytes written
|
// returns number of bytes written
|
||||||
version (X86_64)
|
version (Win64)
|
||||||
|
size_t printf(const(char)[] format, ...) {
|
||||||
|
va_list ap;
|
||||||
|
ap = cast(va_list) &format;
|
||||||
|
ap += format.sizeof;
|
||||||
|
return vprintf(format, ap);
|
||||||
|
}
|
||||||
|
else version (X86_64)
|
||||||
size_t printf(const(char)[] format, ...) {
|
size_t printf(const(char)[] format, ...) {
|
||||||
va_list ap;
|
va_list ap;
|
||||||
va_start(ap, __va_argsave);
|
va_start(ap, __va_argsave);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue