Line data Source code
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.
17 448 : class GrowableFixedArray : public CodeStubAssembler {
18 : public:
19 224 : explicit GrowableFixedArray(compiler::CodeAssemblerState* state)
20 : : CodeStubAssembler(state),
21 : var_array_(this),
22 : var_length_(this),
23 224 : var_capacity_(this) {
24 224 : var_array_ = EmptyFixedArrayConstant();
25 224 : var_capacity_ = IntPtrConstant(0);
26 224 : var_length_ = IntPtrConstant(0);
27 224 : }
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_
|