GDC doesn't catch this ambiguity
Mike
none at none.com
Fri Jan 10 16:45:19 PST 2014
In the following code:
module trace;
private nothrow pure void SendCommand(in int command, in void*
message)
{
asm
{
"mov r0, %[cmd];
mov r1, %[msg];
bkpt #0xAB"
:
: [cmd] "r" command, [msg] "r" message
: "r0", "r1";
};
}
private static nothrow pure void SendMessage(in void* ptr, in
uint length)
{
// Create semihosting message message
uint[3] message =
[
2, // stderr
cast(uint)ptr, // ptr to string
length // size of string
];
// Send semihosting command
SendCommand(0x05, &message);
}
struct Trace
{
static nothrow pure void Write(in string text)
{
SendMessage(text.ptr, text.length);
}
static nothrow pure void Write(uint value)
{
char[32] buffer;
char* p = buffer.ptr + 31;
do
{
p--;
*p = '0' + (value % 10);
value /= 10;
} while(value > 0);
SendMessage(p, (buffer.ptr + 31) - p);
}
static nothrow pure void Write(A...)(A a)
{
foreach(t; a)
{
Write(t);
}
}
static nothrow pure void WriteLine(A...)(A a)
{
foreach(t; a)
{
Write(t);
}
Write("\r\n");
}
}
GDC doesn't catch the ambiguity between...
static nothrow pure void Write(A...)(A a)
and
static nothrow pure void Write(in string text)
... but LDC does.
Who's right?
More information about the D.gnu
mailing list