summaryrefslogtreecommitdiff
path: root/deps/v8/src/objects/embedder-data-array.cc
blob: ba3e92c33c4e5c4b99c2d29e0c62638690d89978 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
// 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/execution/isolate.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