mirror of
https://github.com/xomboverlord/ldc.git
synced 2026-01-11 18:33:14 +01:00
This is based on Item 2 of "More Effective C++". In general, the C++ cast operators are more expressive and easy to find, e.g. by grep. Using const_cast also shuts up some compiler warnings.
34 lines
748 B
C++
34 lines
748 B
C++
#include "mars.h"
|
|
#include "mtype.h"
|
|
#include "expression.h"
|
|
|
|
#include "gen/warnings.h"
|
|
|
|
void warnInvalidPrintfCall(Loc loc, Expression* arguments, size_t nargs)
|
|
{
|
|
Expression* arg = arguments;
|
|
|
|
// make sure first argument is a string literal, or we can't do much
|
|
// TODO make it smarter ?
|
|
if (arg->op != TOKstring)
|
|
return; // assume valid
|
|
|
|
StringExp* strexp = static_cast<StringExp*>(arg);
|
|
|
|
// not wchar or dhar
|
|
if (strexp->sz != 1)
|
|
{
|
|
warning(loc, "printf does not support wchar and dchar strings");
|
|
return;
|
|
}
|
|
|
|
#if 0
|
|
// check the format string
|
|
const char* str = static_cast<char*>(strexp->string);
|
|
for (size_t i = 0; i < strexp->len; ++i)
|
|
{
|
|
// TODO
|
|
}
|
|
#endif
|
|
}
|