V8 API Reference, 7.2.502.16 (for Deno 0.2.4)
growable-fixed-array-gen.h
1 // Copyright 2018 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef V8_BUILTINS_GROWABLE_FIXED_ARRAY_GEN_H_
6 #define V8_BUILTINS_GROWABLE_FIXED_ARRAY_GEN_H_
7 
8 #include "src/code-stub-assembler.h"
9 
10 namespace v8 {
11 namespace internal {
12 
13 template <class T>
14 using TNode = compiler::TNode<T>;
15 
16 // Utility class implementing a growable fixed array through CSA.
18  public:
20  : CodeStubAssembler(state),
21  var_array_(this),
22  var_length_(this),
23  var_capacity_(this) {
24  var_array_ = EmptyFixedArrayConstant();
25  var_capacity_ = IntPtrConstant(0);
26  var_length_ = IntPtrConstant(0);
27  }
28 
29  TNode<IntPtrT> length() const { return var_length_.value(); }
30 
31  TVariable<FixedArray>* var_array() { return &var_array_; }
32  TVariable<IntPtrT>* var_length() { return &var_length_; }
33  TVariable<IntPtrT>* var_capacity() { return &var_capacity_; }
34 
35  void Push(TNode<Object> const value);
36 
37  TNode<JSArray> ToJSArray(TNode<Context> const context);
38 
39  private:
40  TNode<IntPtrT> NewCapacity(TNode<IntPtrT> current_capacity);
41 
42  // Creates a new array with {new_capacity} and copies the first
43  // {element_count} elements from the current array.
44  TNode<FixedArray> ResizeFixedArray(TNode<IntPtrT> const element_count,
45  TNode<IntPtrT> const new_capacity);
46 
47  private:
48  TVariable<FixedArray> var_array_;
49  TVariable<IntPtrT> var_length_;
50  TVariable<IntPtrT> var_capacity_;
51 };
52 
53 } // namespace internal
54 } // namespace v8
55 
56 #endif // V8_BUILTINS_GROWABLE_FIXED_ARRAY_GEN_H_
Definition: libplatform.h:13