mirror of
https://github.com/upx/upx
synced 2025-09-28 19:06:07 +08:00
177 lines
5.2 KiB
C++
177 lines
5.2 KiB
C++
/* ACC -- Automatic Compiler Configuration
|
|
|
|
Copyright (C) 1996-2004 Markus Franz Xaver Johannes Oberhumer
|
|
All Rights Reserved.
|
|
|
|
This software is a copyrighted work licensed under the terms of
|
|
the GNU General Public License. Please consult the file "ACC_LICENSE"
|
|
for details.
|
|
|
|
Markus F.X.J. Oberhumer
|
|
<markus@oberhumer.com>
|
|
http://www.oberhumer.com/
|
|
*/
|
|
|
|
|
|
#ifndef __ACC_CXX_H_INCLUDED
|
|
#define __ACC_CXX_H_INCLUDED 1
|
|
#if defined(__cplusplus)
|
|
|
|
|
|
/*************************************************************************
|
|
// exceptions
|
|
// ACC_CXX_NOTHROW
|
|
**************************************************************************/
|
|
|
|
#if defined(ACC_CXX_NOTHROW)
|
|
#elif (ACC_CC_GNUC && (ACC_CC_GNUC < 0x020800ul))
|
|
# define ACC_CXX_NOTHROW
|
|
#elif (ACC_CC_BORLANDC && (__BORLANDC__ < 0x0450))
|
|
# define ACC_CXX_NOTHROW
|
|
#elif (ACC_CC_HIGHC)
|
|
# define ACC_CXX_NOTHROW
|
|
#elif (ACC_CC_MSC && (_MSC_VER < 1100))
|
|
# define ACC_CXX_NOTHROW
|
|
#elif (ACC_CC_TURBOC)
|
|
# define ACC_CXX_NOTHROW
|
|
#elif (ACC_CC_WATCOMC && !defined(_CPPUNWIND))
|
|
# define ACC_CXX_NOTHROW
|
|
#elif (ACC_CC_ZORTECHC)
|
|
# define ACC_CXX_NOTHROW
|
|
#endif
|
|
|
|
#if !defined(ACC_CXX_NOTHROW)
|
|
# define ACC_CXX_NOTHROW throw()
|
|
#endif
|
|
|
|
|
|
/*************************************************************************
|
|
// disable dynamic allocation of an object - private helpers
|
|
// __ACC_CXX_DO_NEW
|
|
// __ACC_CXX_DO_DELETE
|
|
**************************************************************************/
|
|
|
|
#if defined(__ACC_CXX_DO_NEW)
|
|
#elif (ACC_CC_PGI)
|
|
# define __ACC_CXX_DO_NEW { return 0; }
|
|
#else
|
|
# define __ACC_CXX_DO_NEW ;
|
|
#endif
|
|
|
|
|
|
/* need an implementation in case a class has virtual members */
|
|
#if defined(__ACC_CXX_DO_DELETE)
|
|
#elif (ACC_CC_BORLANDC || ACC_CC_TURBOC)
|
|
# define __ACC_CXX_DO_DELETE { }
|
|
#else
|
|
# define __ACC_CXX_DO_DELETE ACC_CXX_NOTHROW { }
|
|
#endif
|
|
|
|
|
|
/*************************************************************************
|
|
// disable dynamic allocation of an object
|
|
// ACC_CXX_DISABLE_NEW_DELETE
|
|
// ACC_CXX_DISABLE_NEW_DELETE_STRICT
|
|
**************************************************************************/
|
|
|
|
#undef __ACC_CXX_HAVE_ARRAY_NEW
|
|
#undef __ACC_CXX_HAVE_PLACEMENT_NEW
|
|
#undef __ACC_CXX_HAVE_PLACEMENT_DELETE
|
|
|
|
#if (ACC_CC_BORLANDC && (__BORLANDC__ < 0x0450))
|
|
#elif (ACC_CC_MSC && ACC_MM_HUGE)
|
|
# define ACC_CXX_DISABLE_NEW_DELETE private:
|
|
#elif (ACC_CC_MSC && (_MSC_VER < 1100))
|
|
#elif (ACC_CC_SYMANTECC || ACC_CC_ZORTECHC)
|
|
#elif (ACC_CC_TURBOC)
|
|
#elif (ACC_CC_WATCOMC && (__WATCOMC__ < 1100))
|
|
#else
|
|
# define __ACC_CXX_HAVE_ARRAY_NEW 1
|
|
#endif
|
|
|
|
#if (__ACC_CXX_HAVE_ARRAY_NEW)
|
|
# define __ACC_CXX_HAVE_PLACEMENT_NEW 1
|
|
#endif
|
|
|
|
#if (__ACC_CXX_HAVE_PLACEMENT_NEW)
|
|
# if (ACC_CC_GNUC >= 0x030000ul)
|
|
# define __ACC_CXX_HAVE_PLACEMENT_DELETE 1
|
|
# elif (ACC_CC_INTELC)
|
|
# define __ACC_CXX_HAVE_PLACEMENT_DELETE 1
|
|
# elif (ACC_CC_MSC && (_MSC_VER >= 1200))
|
|
# define __ACC_CXX_HAVE_PLACEMENT_DELETE 1
|
|
# elif (ACC_CC_PGI)
|
|
# define __ACC_CXX_HAVE_PLACEMENT_DELETE 1
|
|
# endif
|
|
#endif
|
|
|
|
|
|
#if !defined(__ACC_CXX_PLACEMENT_NEW) && (__ACC_CXX_HAVE_PLACEMENT_NEW)
|
|
# define __ACC_CXX_PLACEMENT_NEW \
|
|
static void* operator new(size_t, void*) __ACC_CXX_DO_NEW
|
|
#endif
|
|
#if !defined(__ACC_CXX_PLACEMENT_DELETE) && (__ACC_CXX_HAVE_PLACEMENT_DELETE)
|
|
# define __ACC_CXX_PLACEMENT_DELETE \
|
|
static void operator delete(void*, void*) __ACC_CXX_DO_DELETE
|
|
#endif
|
|
#if !defined(__ACC_CXX_PLACEMENT_NEW)
|
|
# define __ACC_CXX_PLACEMENT_NEW
|
|
#endif
|
|
#if !defined(__ACC_CXX_PLACEMENT_DELETE)
|
|
# define __ACC_CXX_PLACEMENT_DELETE
|
|
#endif
|
|
|
|
|
|
#if !defined(ACC_CXX_DISABLE_NEW_DELETE) && (defined(new) || defined(delete))
|
|
# define ACC_CXX_DISABLE_NEW_DELETE private:
|
|
#endif
|
|
|
|
#if !defined(ACC_CXX_DISABLE_NEW_DELETE) && (ACC_CC_GNUC && (ACC_CC_GNUC < 0x025b00ul))
|
|
# define ACC_CXX_DISABLE_NEW_DELETE private:
|
|
#endif
|
|
#if !defined(ACC_CXX_DISABLE_NEW_DELETE) && (ACC_CC_HIGHC)
|
|
# define ACC_CXX_DISABLE_NEW_DELETE private:
|
|
#endif
|
|
|
|
|
|
#if !defined(ACC_CXX_DISABLE_NEW_DELETE) && !(__ACC_CXX_HAVE_ARRAY_NEW)
|
|
/* for old compilers use `protected' instead of `private' */
|
|
# define ACC_CXX_DISABLE_NEW_DELETE \
|
|
protected: static void operator delete(void*) __ACC_CXX_DO_DELETE \
|
|
protected: static void* operator new(size_t) __ACC_CXX_DO_NEW \
|
|
private:
|
|
#endif
|
|
|
|
#if !defined(ACC_CXX_DISABLE_NEW_DELETE)
|
|
# define ACC_CXX_DISABLE_NEW_DELETE \
|
|
protected: \
|
|
static void operator delete(void*) __ACC_CXX_DO_DELETE \
|
|
static void operator delete[](void*) __ACC_CXX_DO_DELETE \
|
|
private: \
|
|
static void* operator new(size_t) __ACC_CXX_DO_NEW \
|
|
static void* operator new[](size_t) __ACC_CXX_DO_NEW
|
|
# define ACC_CXX_DISABLE_NEW_DELETE_STRICT \
|
|
protected: \
|
|
static void operator delete(void*) __ACC_CXX_DO_DELETE \
|
|
static void operator delete[](void*) __ACC_CXX_DO_DELETE \
|
|
__ACC_CXX_PLACEMENT_DELETE \
|
|
private: \
|
|
static void* operator new(size_t) __ACC_CXX_DO_NEW \
|
|
static void* operator new[](size_t) __ACC_CXX_DO_NEW \
|
|
__ACC_CXX_PLACEMENT_NEW
|
|
#endif
|
|
|
|
#if !defined(ACC_CXX_DISABLE_NEW_DELETE_STRICT)
|
|
# define ACC_CXX_DISABLE_NEW_DELETE_STRICT ACC_CXX_DISABLE_NEW_DELETE
|
|
#endif
|
|
|
|
|
|
|
|
#endif /* __cplusplus */
|
|
#endif /* already included */
|
|
|
|
|
|
/*
|
|
vi:ts=4:et
|
|
*/
|