diff options
author | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
---|---|---|
committer | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
commit | 5f8de423f190bbb79a62f804151bc24824fa32d8 (patch) | |
tree | 10027f336435511475e392454359edea8e25895d /js/src/vm/ArrayObject.h | |
parent | 49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff) | |
download | uxp-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz |
Add m-esr52 at 52.6.0
Diffstat (limited to 'js/src/vm/ArrayObject.h')
-rw-r--r-- | js/src/vm/ArrayObject.h | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/js/src/vm/ArrayObject.h b/js/src/vm/ArrayObject.h new file mode 100644 index 0000000000..8cfef0d566 --- /dev/null +++ b/js/src/vm/ArrayObject.h @@ -0,0 +1,77 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * vim: set ts=8 sts=4 et sw=4 tw=99: + * 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 vm_ArrayObject_h +#define vm_ArrayObject_h + +#include "vm/NativeObject.h" + +namespace js { + +class AutoSetNewObjectMetadata; + +class ArrayObject : public NativeObject +{ + public: + // Array(x) eagerly allocates dense elements if x <= this value. Without + // the subtraction the max would roll over to the next power-of-two (4096) + // due to the way that growElements() and goodAllocated() work. + static const uint32_t EagerAllocationMaxLength = 2048 - ObjectElements::VALUES_PER_HEADER; + + static const Class class_; + + bool lengthIsWritable() const { + return !getElementsHeader()->hasNonwritableArrayLength(); + } + + uint32_t length() const { + return getElementsHeader()->length; + } + + inline void setLength(ExclusiveContext* cx, uint32_t length); + + // Variant of setLength for use on arrays where the length cannot overflow int32_t. + void setLengthInt32(uint32_t length) { + MOZ_ASSERT(lengthIsWritable()); + MOZ_ASSERT(length <= INT32_MAX); + getElementsHeader()->length = length; + } + + // Make an array object with the specified initial state. + static inline ArrayObject* + createArray(ExclusiveContext* cx, + gc::AllocKind kind, + gc::InitialHeap heap, + HandleShape shape, + HandleObjectGroup group, + uint32_t length, + AutoSetNewObjectMetadata& metadata); + + // Make a copy-on-write array object which shares the elements of an + // existing object. + static inline ArrayObject* + createCopyOnWriteArray(ExclusiveContext* cx, + gc::InitialHeap heap, + HandleArrayObject sharedElementsOwner); + + private: + // Helper for the above methods. + static inline ArrayObject* + createArrayInternal(ExclusiveContext* cx, + gc::AllocKind kind, + gc::InitialHeap heap, + HandleShape shape, + HandleObjectGroup group, + AutoSetNewObjectMetadata&); + + static inline ArrayObject* + finishCreateArray(ArrayObject* obj, HandleShape shape, AutoSetNewObjectMetadata& metadata); +}; + +} // namespace js + +#endif // vm_ArrayObject_h + |