forked from mirrors/gecko-dev
		
	 34acbb653a
			
		
	
	
		34acbb653a
		
	
	
	
	
		
			
			First reformat with clang-format 10 # ignore-this-changeset Differential Revision: https://phabricator.services.mozilla.com/D68802
		
			
				
	
	
		
			82 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /* This Source Code Form is subject to the terms of the Mozilla Public
 | |
|  * License, v. 2.0. If a copy of the MPL was not distributed with this
 | |
|  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 | |
| 
 | |
| #ifndef mozilla_cxxalloc_h
 | |
| #define mozilla_cxxalloc_h
 | |
| 
 | |
| /*
 | |
|  * We implement the default operators new/delete as part of
 | |
|  * libmozalloc, replacing their definitions in libstdc++.  The
 | |
|  * operator new* definitions in libmozalloc will never return a NULL
 | |
|  * pointer.
 | |
|  *
 | |
|  * Each operator new immediately below returns a pointer to memory
 | |
|  * that can be delete'd by any of
 | |
|  *
 | |
|  *   (1) the matching infallible operator delete immediately below
 | |
|  *   (2) the matching system |operator delete(void*, std::nothrow)|
 | |
|  *   (3) the matching system |operator delete(void*) noexcept(false)|
 | |
|  *
 | |
|  * NB: these are declared |noexcept(false)|, though they will never
 | |
|  * throw that exception.  This declaration is consistent with the rule
 | |
|  * that |::operator new() noexcept(false)| will never return NULL.
 | |
|  *
 | |
|  * NB: mozilla::fallible can be used instead of std::nothrow.
 | |
|  */
 | |
| 
 | |
| #ifndef MOZALLOC_EXPORT_NEW
 | |
| #  define MOZALLOC_EXPORT_NEW MFBT_API
 | |
| #endif
 | |
| 
 | |
| MOZALLOC_EXPORT_NEW void* operator new(size_t size) noexcept(false) {
 | |
|   return moz_xmalloc(size);
 | |
| }
 | |
| 
 | |
| MOZALLOC_EXPORT_NEW void* operator new(size_t size,
 | |
|                                        const std::nothrow_t&) noexcept(true) {
 | |
|   return malloc_impl(size);
 | |
| }
 | |
| 
 | |
| MOZALLOC_EXPORT_NEW void* operator new[](size_t size) noexcept(false) {
 | |
|   return moz_xmalloc(size);
 | |
| }
 | |
| 
 | |
| MOZALLOC_EXPORT_NEW void* operator new[](size_t size,
 | |
|                                          const std::nothrow_t&) noexcept(true) {
 | |
|   return malloc_impl(size);
 | |
| }
 | |
| 
 | |
| MOZALLOC_EXPORT_NEW void operator delete(void* ptr) noexcept(true) {
 | |
|   return free_impl(ptr);
 | |
| }
 | |
| 
 | |
| MOZALLOC_EXPORT_NEW void operator delete(void* ptr,
 | |
|                                          const std::nothrow_t&) noexcept(true) {
 | |
|   return free_impl(ptr);
 | |
| }
 | |
| 
 | |
| MOZALLOC_EXPORT_NEW void operator delete[](void* ptr) noexcept(true) {
 | |
|   return free_impl(ptr);
 | |
| }
 | |
| 
 | |
| MOZALLOC_EXPORT_NEW void operator delete[](
 | |
|     void* ptr, const std::nothrow_t&) noexcept(true) {
 | |
|   return free_impl(ptr);
 | |
| }
 | |
| 
 | |
| #if defined(XP_WIN)
 | |
| // We provide the global sized delete overloads unconditionally because the
 | |
| // MSVC runtime headers do, despite compiling with /Zc:sizedDealloc-
 | |
| MOZALLOC_EXPORT_NEW void operator delete(void* ptr,
 | |
|                                          size_t /*size*/) noexcept(true) {
 | |
|   return free_impl(ptr);
 | |
| }
 | |
| 
 | |
| MOZALLOC_EXPORT_NEW void operator delete[](void* ptr,
 | |
|                                            size_t /*size*/) noexcept(true) {
 | |
|   return free_impl(ptr);
 | |
| }
 | |
| #endif
 | |
| 
 | |
| #endif /* mozilla_cxxalloc_h */
 |