Index: src/utils.h |
diff --git a/src/utils.h b/src/utils.h |
index 1ee4470586d34b0d70d932202260d49956a4c693..a09f1778631dae6abf9acac5369c981d189a79c7 100644 |
--- a/src/utils.h |
+++ b/src/utils.h |
@@ -13,7 +13,6 @@ |
#include "include/v8.h" |
#include "src/allocation.h" |
#include "src/base/bits.h" |
-#include "src/base/compiler-specific.h" |
#include "src/base/logging.h" |
#include "src/base/macros.h" |
#include "src/base/platform/platform.h" |
@@ -909,21 +908,42 @@ |
// ---------------------------------------------------------------------------- |
// I/O support. |
+#if __GNUC__ >= 4 |
+// On gcc we can ask the compiler to check the types of %d-style format |
+// specifiers and their associated arguments. TODO(erikcorry) fix this |
+// so it works on MacOSX. |
+#if defined(__MACH__) && defined(__APPLE__) |
+#define PRINTF_CHECKING |
+#define FPRINTF_CHECKING |
+#define PRINTF_METHOD_CHECKING |
+#define FPRINTF_METHOD_CHECKING |
+#else // MacOsX. |
+#define PRINTF_CHECKING __attribute__ ((format (printf, 1, 2))) |
+#define FPRINTF_CHECKING __attribute__ ((format (printf, 2, 3))) |
+#define PRINTF_METHOD_CHECKING __attribute__ ((format (printf, 2, 3))) |
+#define FPRINTF_METHOD_CHECKING __attribute__ ((format (printf, 3, 4))) |
+#endif |
+#else |
+#define PRINTF_CHECKING |
+#define FPRINTF_CHECKING |
+#define PRINTF_METHOD_CHECKING |
+#define FPRINTF_METHOD_CHECKING |
+#endif |
+ |
// Our version of printf(). |
-void PRINTF_FORMAT(1, 2) PrintF(const char* format, ...); |
-void PRINTF_FORMAT(2, 3) PrintF(FILE* out, const char* format, ...); |
+void PRINTF_CHECKING PrintF(const char* format, ...); |
+void FPRINTF_CHECKING PrintF(FILE* out, const char* format, ...); |
// Prepends the current process ID to the output. |
-void PRINTF_FORMAT(1, 2) PrintPID(const char* format, ...); |
+void PRINTF_CHECKING PrintPID(const char* format, ...); |
// Prepends the current process ID and given isolate pointer to the output. |
-void PRINTF_FORMAT(2, 3) PrintIsolate(void* isolate, const char* format, ...); |
+void PrintIsolate(void* isolate, const char* format, ...); |
// Safe formatting print. Ensures that str is always null-terminated. |
// Returns the number of chars written, or -1 if output was truncated. |
-int PRINTF_FORMAT(2, 3) SNPrintF(Vector<char> str, const char* format, ...); |
-int PRINTF_FORMAT(2, 0) |
- VSNPrintF(Vector<char> str, const char* format, va_list args); |
+int FPRINTF_CHECKING SNPrintF(Vector<char> str, const char* format, ...); |
+int VSNPrintF(Vector<char> str, const char* format, va_list args); |
void StrNCpy(Vector<char> dest, const char* src, size_t n); |
@@ -1426,11 +1446,10 @@ |
StringBuilder(char* buffer, int size) : SimpleStringBuilder(buffer, size) { } |
// Add formatted contents to the builder just like printf(). |
- void PRINTF_FORMAT(2, 3) AddFormatted(const char* format, ...); |
+ void AddFormatted(const char* format, ...); |
// Add formatted contents like printf based on a va_list. |
- void PRINTF_FORMAT(2, 0) AddFormattedList(const char* format, va_list list); |
- |
+ void AddFormattedList(const char* format, va_list list); |
private: |
DISALLOW_IMPLICIT_CONSTRUCTORS(StringBuilder); |
}; |