aboutsummaryrefslogtreecommitdiff
path: root/deps/v8/src/objects/embedder-data-array.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/objects/embedder-data-array.cc')
-rw-r--r--deps/v8/src/objects/embedder-data-array.cc27
1 files changed, 27 insertions, 0 deletions
diff --git a/deps/v8/src/objects/embedder-data-array.cc b/deps/v8/src/objects/embedder-data-array.cc
new file mode 100644
index 0000000000..665a1fa2f4
--- /dev/null
+++ b/deps/v8/src/objects/embedder-data-array.cc
@@ -0,0 +1,27 @@
+// Copyright 2018 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "src/objects/embedder-data-array.h"
+#include "src/objects/embedder-data-array-inl.h"
+
+namespace v8 {
+namespace internal {
+
+// static
+Handle<EmbedderDataArray> EmbedderDataArray::EnsureCapacity(
+ Isolate* isolate, Handle<EmbedderDataArray> array, int index) {
+ if (index < array->length()) return array;
+ DCHECK_LT(index, kMaxLength);
+ Handle<EmbedderDataArray> new_array =
+ isolate->factory()->NewEmbedderDataArray(index + 1);
+ DisallowHeapAllocation no_gc;
+ // Last new space allocation does not require any write barriers.
+ size_t size = array->length() * kEmbedderDataSlotSize;
+ MemCopy(reinterpret_cast<void*>(new_array->slots_start()),
+ reinterpret_cast<void*>(array->slots_start()), size);
+ return new_array;
+}
+
+} // namespace internal
+} // namespace v8