diff options
author | Daniel Bertalan <dani@danielbertalan.dev> | 2021-06-29 22:57:27 +0200 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2021-07-05 20:23:42 +0200 |
commit | a482a3e60915c389bbcb5eb6a54a82b7f607c13f (patch) | |
tree | ddefc91885064283c7875890933ee8c4470a6e14 /AK/kmalloc.h | |
parent | 27fecf57bd6644b82fab323e751f81b17c59934c (diff) | |
download | serenity-a482a3e60915c389bbcb5eb6a54a82b7f607c13f.zip |
AK: Declare operators `new` and `delete` as global functions
This fixes a build issue introduced in 23d66fe, where the compiler
statically detected that that mismatching new and delete operators were
used.
Clang generates a warning for this, for the reasons described in the
comment in `AK/kmalloc.cpp`, but GCC does not.
Besides moving the allocator functions into a `.cpp` file, declarations
in `AK/kmalloc.cpp` were reordered to have imports at the top, in order
to make the code more readable.
Diffstat (limited to 'AK/kmalloc.h')
-rw-r--r-- | AK/kmalloc.h | 80 |
1 files changed, 15 insertions, 65 deletions
diff --git a/AK/kmalloc.h b/AK/kmalloc.h index 5807828980..03484a7280 100644 --- a/AK/kmalloc.h +++ b/AK/kmalloc.h @@ -1,13 +1,27 @@ /* * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org> + * Copyright (c) 2021, Daniel Bertalan <dani@danielbertalan.dev> * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once -#ifndef __serenity__ +#if defined(KERNEL) +# include <Kernel/Heap/kmalloc.h> +#else # include <new> +# include <stdlib.h> + +# define kcalloc calloc +# define kmalloc malloc +# define kmalloc_good_size malloc_good_size +# define kfree free +# define krealloc realloc +#endif + +#ifndef __serenity__ +# include <AK/Types.h> # ifndef AK_OS_MACOS extern "C" { @@ -28,68 +42,4 @@ inline size_t malloc_good_size(size_t size) { return size; } # define AK_MAKE_ETERNAL #endif -#if defined(KERNEL) -# include <Kernel/Heap/kmalloc.h> -#else -# include <stdlib.h> - -# define kcalloc calloc -# define kmalloc malloc -# define kmalloc_good_size malloc_good_size -# define kfree free -# define krealloc realloc - -# ifdef __serenity__ - -# include <AK/Assertions.h> -# include <new> - -inline void* operator new(size_t size) -{ - void* ptr = kmalloc(size); - VERIFY(ptr); - return ptr; -} - -inline void* operator new(size_t size, const std::nothrow_t&) noexcept -{ - return kmalloc(size); -} - -inline void operator delete(void* ptr) noexcept -{ - return kfree(ptr); -} - -inline void operator delete(void* ptr, size_t) noexcept -{ - return kfree(ptr); -} - -inline void* operator new[](size_t size) -{ - void* ptr = kmalloc(size); - VERIFY(ptr); - return ptr; -} - -inline void* operator new[](size_t size, const std::nothrow_t&) noexcept -{ - return kmalloc(size); -} - -inline void operator delete[](void* ptr) noexcept -{ - return kfree(ptr); -} - -inline void operator delete[](void* ptr, size_t) noexcept -{ - return kfree(ptr); -} - -# endif - -#endif - using std::nothrow; |