summaryrefslogtreecommitdiffstats
path: root/js/src/ds/LifoAlloc.h
diff options
context:
space:
mode:
authorwolfbeast <mcwerewolf@gmail.com>2018-09-10 23:43:57 +0200
committerwolfbeast <mcwerewolf@gmail.com>2018-09-10 23:43:57 +0200
commit7565513554476f7262d9d524b9a36bd069dacf9c (patch)
tree56023022231f2d082439a2d15b761d17947707fb /js/src/ds/LifoAlloc.h
parent69b88dfccc38b9022e65bf459b199bdf4145ce67 (diff)
parent7bf3d2440e8ff65763daedca51aad6d0288ef61d (diff)
downloadUXP-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.h16
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;