diff options
author | wolfbeast <mcwerewolf@gmail.com> | 2018-09-10 23:43:57 +0200 |
---|---|---|
committer | wolfbeast <mcwerewolf@gmail.com> | 2018-09-10 23:43:57 +0200 |
commit | 7565513554476f7262d9d524b9a36bd069dacf9c (patch) | |
tree | 56023022231f2d082439a2d15b761d17947707fb /js/src/ds/LifoAlloc.h | |
parent | 69b88dfccc38b9022e65bf459b199bdf4145ce67 (diff) | |
parent | 7bf3d2440e8ff65763daedca51aad6d0288ef61d (diff) | |
download | UXP-7565513554476f7262d9d524b9a36bd069dacf9c.tar UXP-7565513554476f7262d9d524b9a36bd069dacf9c.tar.gz UXP-7565513554476f7262d9d524b9a36bd069dacf9c.tar.lz UXP-7565513554476f7262d9d524b9a36bd069dacf9c.tar.xz UXP-7565513554476f7262d9d524b9a36bd069dacf9c.zip |
Merge branch 'master' into ported-upstream
Diffstat (limited to 'js/src/ds/LifoAlloc.h')
-rw-r--r-- | js/src/ds/LifoAlloc.h | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/js/src/ds/LifoAlloc.h b/js/src/ds/LifoAlloc.h index f349cd476..b4e9c3418 100644 --- a/js/src/ds/LifoAlloc.h +++ b/js/src/ds/LifoAlloc.h @@ -15,6 +15,8 @@ #include "mozilla/TemplateLib.h" #include "mozilla/TypeTraits.h" +#include <new> + // This data structure supports stacky LIFO allocation (mark/release and // LifoAllocScope). It does not maintain one contiguous segment; instead, it // maintains a bunch of linked memory segments. In order to prevent malloc/free @@ -285,6 +287,20 @@ class LifoAlloc return allocImpl(n); } + template<typename T, typename... Args> + MOZ_ALWAYS_INLINE T* + allocInSize(size_t n, Args&&... args) + { + MOZ_ASSERT(n >= sizeof(T), "must request enough space to store a T"); + static_assert(alignof(T) <= detail::LIFO_ALLOC_ALIGN, + "LifoAlloc must provide enough alignment to store T"); + void* ptr = alloc(n); + if (!ptr) + return nullptr; + + return new (ptr) T(mozilla::Forward<Args>(args)...); + } + MOZ_ALWAYS_INLINE void* allocInfallible(size_t n) { AutoEnterOOMUnsafeRegion oomUnsafe; |