Fix new and delete operators definition for DigitalMars compiler
authorIvan Maidanski <ivmai@mail.ru>
Mon, 4 Jun 2018 07:04:09 +0000 (10:04 +0300)
committerIvan Maidanski <ivmai@mail.ru>
Mon, 4 Jun 2018 07:04:09 +0000 (10:04 +0300)
* gc_cpp.cc (new, delete, new[], delete[]): Do not define if __DMC__.
* include/gc_cpp.h (new[], delete[], new, delete): Define also if
__DMC__.
* include/gc_cpp.h [_MSC_VER] (new[], delete[]): Replace _MSC_VER>1020
to defined(GC_OPERATOR_NEW_ARRAY).

gc_cpp.cc
include/gc_cpp.h

index 73f54cf..ad361b6 100644 (file)
--- a/gc_cpp.cc
+++ b/gc_cpp.cc
@@ -29,7 +29,7 @@ built-in "new" and "delete".
 
 #include "gc_cpp.h"
 
-#ifndef _MSC_VER
+#if !defined(_MSC_VER) && !defined(__DMC__)
 
   void* operator new(size_t size) GC_DECL_NEW_THROW {
     void* obj = GC_MALLOC_UNCOLLECTABLE(size);
index 091e709..e5f770d 100644 (file)
@@ -295,7 +295,7 @@ inline void* operator new(size_t size, GC_NS_QUALIFY(GCPlacement) gcp,
                               GC_NS_QUALIFY(GCCleanUpFunc), void*);
 #endif
 
-#ifdef _MSC_VER
+#if defined(_MSC_VER) || defined(__DMC__)
   // The following ensures that the system default operator new[] does not
   // get undefined, which is what seems to happen on VC++ 6 for some reason
   // if we define a multi-argument operator new[].
@@ -304,7 +304,7 @@ inline void* operator new(size_t size, GC_NS_QUALIFY(GCPlacement) gcp,
   // Inlining done to avoid mix up of new and delete operators by VC++ 9 (due
   // to arbitrary ordering during linking).
 
-# if _MSC_VER > 1020
+# ifdef GC_OPERATOR_NEW_ARRAY
     inline void* operator new[](size_t size) GC_DECL_NEW_THROW
     {
       void* obj = GC_MALLOC_UNCOLLECTABLE(size);
@@ -351,7 +351,7 @@ inline void* operator new(size_t size, GC_NS_QUALIFY(GCPlacement) gcp,
     }
 # endif /* !GC_DEBUG */
 
-# if _MSC_VER > 1020
+# ifdef GC_OPERATOR_NEW_ARRAY
     // This new operator is used by VC++ 7+ in Debug builds:
     inline void* operator new[](size_t size, int nBlockUse,
                                 const char* szFileName, int nLine)