--- parser3/src/include/pa_memory.h 2017/12/03 23:36:23 1.35 +++ parser3/src/include/pa_memory.h 2020/12/15 13:33:26 1.40 @@ -9,7 +9,7 @@ #ifndef PA_MEMORY_H #define PA_MEMORY_H -#define IDENT_PA_MEMORY_H "$Id: pa_memory.h,v 1.35 2017/12/03 23:36:23 moko Exp $" +#define IDENT_PA_MEMORY_H "$Id: pa_memory.h,v 1.40 2020/12/15 13:33:26 moko Exp $" // include @@ -19,7 +19,7 @@ // define destructors use for Array, Hash and VMethodFrame #define USE_DESTRUCTORS -// std::basic_stringstream used in ^table.csv-string[] is compatible with delete usage check only under Debian 9 +// std::basic_stringstream used in ^table.csv-string[] is compatible with delete usage check only under Debian 9/10, FreeBSD 12 // #define CHECK_DELETE_USAGE // forwards @@ -112,14 +112,16 @@ typedef PA_Allocated PA_Object; #define PA_THROW(what) throw(what) #endif -#ifndef _MSC_VER +#if !defined(_MSC_VER) && !defined(FREEBSD1X) // regular new/delete are disabled from accidental use +// no checks for FreeBSD1X.X due to https://bugs.llvm.org/show_bug.cgi?id=40161 bug void *new_disabled(); void delete_disabled(); inline void *operator new[] (std::size_t) PA_THROW(std::bad_alloc){ return new_disabled(); } inline void operator delete[](void *) throw(){ delete_disabled(); } +inline void operator delete[](void *, std::size_t) throw(){ delete_disabled(); } inline void *operator new(std::size_t) PA_THROW(std::bad_alloc){ return new_disabled(); } #ifdef CHECK_DELETE_USAGE @@ -144,4 +146,10 @@ inline char *strdup(const char*, size_t) #endif // _MSC_VER +#ifdef PA_DEBUG_DISABLE_GC +#define PA_GC_GCOLLECT +#else +#define PA_GC_GCOLLECT { GC_enable(); GC_gcollect(); GC_disable(); } +#endif + #endif