Index: src/base/compiler-specific.h |
diff --git a/src/base/compiler-specific.h b/src/base/compiler-specific.h |
index 822893ffecf073924c03cfcef70760fc4f0cdde6..1858caa047136adb2f2c0e75490918673481741c 100644 |
--- a/src/base/compiler-specific.h |
+++ b/src/base/compiler-specific.h |
@@ -60,4 +60,46 @@ |
#define STATIC_CONST_MEMBER_DEFINITION |
#endif |
+#if V8_CC_MSVC |
+ |
+#include <sal.h> |
+ |
+// Macros for suppressing and disabling warnings on MSVC. |
+// |
+// Warning numbers are enumerated at: |
+// http://msdn.microsoft.com/en-us/library/8x5x43k7(VS.80).aspx |
+// |
+// The warning pragma: |
+// http://msdn.microsoft.com/en-us/library/2c8f766e(VS.80).aspx |
+// |
+// Using __pragma instead of #pragma inside macros: |
+// http://msdn.microsoft.com/en-us/library/d9x1s805.aspx |
+ |
+// MSVC_SUPPRESS_WARNING disables warning |n| for the remainder of the line and |
+// for the next line of the source file. |
+#define MSVC_SUPPRESS_WARNING(n) __pragma(warning(suppress : n)) |
+ |
+// Allows exporting a class that inherits from a non-exported base class. |
+// This uses suppress instead of push/pop because the delimiter after the |
+// declaration (either "," or "{") has to be placed before the pop macro. |
+// |
+// Example usage: |
+// class EXPORT_API Foo : NON_EXPORTED_BASE(public Bar) { |
+// |
+// MSVC Compiler warning C4275: |
+// non dll-interface class 'Bar' used as base for dll-interface class 'Foo'. |
+// Note that this is intended to be used only when no access to the base class' |
+// static data is done through derived classes or inline methods. For more info, |
+// see http://msdn.microsoft.com/en-us/library/3tdb471s(VS.80).aspx |
+#define NON_EXPORTED_BASE(code) \ |
+ MSVC_SUPPRESS_WARNING(4275) \ |
+ code |
+ |
+#else // Not MSVC |
+ |
+#define MSVC_SUPPRESS_WARNING(n) |
+#define NON_EXPORTED_BASE(code) code |
+ |
+#endif // V8_CC_MSVC |
+ |
#endif // V8_BASE_COMPILER_SPECIFIC_H_ |