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_OBJECTS_PROPERTY_ARRAY_H_
6 : #define V8_OBJECTS_PROPERTY_ARRAY_H_
7 :
8 : #include "src/objects/heap-object.h"
9 : #include "torque-generated/class-definitions-from-dsl.h"
10 :
11 : // Has to be the last include (doesn't have include guards):
12 : #include "src/objects/object-macros.h"
13 :
14 : namespace v8 {
15 : namespace internal {
16 :
17 : class PropertyArray : public HeapObject {
18 : public:
19 : // [length]: length of the array.
20 : inline int length() const;
21 :
22 : // Get the length using acquire loads.
23 : inline int synchronized_length() const;
24 :
25 : // This is only used on a newly allocated PropertyArray which
26 : // doesn't have an existing hash.
27 : inline void initialize_length(int length);
28 :
29 : inline void SetHash(int hash);
30 : inline int Hash() const;
31 :
32 : inline Object get(int index) const;
33 :
34 : inline void set(int index, Object value);
35 : // Setter with explicit barrier mode.
36 : inline void set(int index, Object value, WriteBarrierMode mode);
37 :
38 : // Gives access to raw memory which stores the array's data.
39 : inline ObjectSlot data_start();
40 :
41 : // Garbage collection support.
42 : static constexpr int SizeFor(int length) {
43 575620248 : return kHeaderSize + length * kTaggedSize;
44 : }
45 : static constexpr int OffsetOfElementAt(int index) { return SizeFor(index); }
46 :
47 : DECL_CAST(PropertyArray)
48 : DECL_PRINTER(PropertyArray)
49 : DECL_VERIFIER(PropertyArray)
50 :
51 : DEFINE_FIELD_OFFSET_CONSTANTS(HeapObject::kHeaderSize,
52 : TORQUE_GENERATED_PROPERTY_ARRAY_FIELDS)
53 : static const int kHeaderSize = kSize;
54 :
55 : // Garbage collection support.
56 : using BodyDescriptor = FlexibleBodyDescriptor<kHeaderSize>;
57 :
58 : static const int kLengthFieldSize = 10;
59 : class LengthField : public BitField<int, 0, kLengthFieldSize> {};
60 : static const int kMaxLength = LengthField::kMax;
61 : class HashField : public BitField<int, kLengthFieldSize,
62 : kSmiValueSize - kLengthFieldSize - 1> {};
63 :
64 : static const int kNoHashSentinel = 0;
65 :
66 : OBJECT_CONSTRUCTORS(PropertyArray, HeapObject);
67 : };
68 :
69 : } // namespace internal
70 : } // namespace v8
71 :
72 : #include "src/objects/object-macros-undef.h"
73 :
74 : #endif // V8_OBJECTS_PROPERTY_ARRAY_H_
|