V8 API Reference, 7.2.502.16 (for Deno 0.2.4)
access-builder.h
1 // Copyright 2014 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_COMPILER_ACCESS_BUILDER_H_
6 #define V8_COMPILER_ACCESS_BUILDER_H_
7 
8 #include "src/base/compiler-specific.h"
9 #include "src/compiler/simplified-operator.h"
10 #include "src/elements-kind.h"
11 #include "src/globals.h"
12 #include "src/objects/js-objects.h"
13 
14 namespace v8 {
15 namespace internal {
16 namespace compiler {
17 
18 // This access builder provides a set of static methods constructing commonly
19 // used FieldAccess and ElementAccess descriptors. These descriptors serve as
20 // parameters to simplified load/store operators.
21 class V8_EXPORT_PRIVATE AccessBuilder final
22  : public NON_EXPORTED_BASE(AllStatic) {
23  public:
24  // ===========================================================================
25  // Access to external values (based on external references).
26 
27  // Provides access to a tagged field identified by an external reference.
28  static FieldAccess ForExternalTaggedValue();
29 
30  // Provides access to an uint8 field identified by an external reference.
31  static FieldAccess ForExternalUint8Value();
32 
33  // ===========================================================================
34  // Access to heap object fields and elements (based on tagged pointer).
35 
36  // Provides access to HeapObject::map() field.
37  static FieldAccess ForMap();
38 
39  // Provides access to HeapNumber::value() field.
40  static FieldAccess ForHeapNumberValue();
41 
42  // Provides access to BigInt's bit field.
43  static FieldAccess ForBigIntBitfield();
44 
45  // Provides access to JSObject::properties() field.
46  static FieldAccess ForJSObjectPropertiesOrHash();
47 
48  // Provides access to JSObject::elements() field.
49  static FieldAccess ForJSObjectElements();
50 
51  // Provides access to JSObject inobject property fields.
52  static FieldAccess ForJSObjectInObjectProperty(const MapRef& map, int index);
53  static FieldAccess ForJSObjectOffset(
54  int offset, WriteBarrierKind write_barrier_kind = kFullWriteBarrier);
55 
56  // Provides access to JSCollecton::table() field.
57  static FieldAccess ForJSCollectionTable();
58 
59  // Provides access to JSCollectionIterator::table() field.
60  static FieldAccess ForJSCollectionIteratorTable();
61 
62  // Provides access to JSCollectionIterator::index() field.
63  static FieldAccess ForJSCollectionIteratorIndex();
64 
65  // Provides access to JSFunction::prototype_or_initial_map() field.
66  static FieldAccess ForJSFunctionPrototypeOrInitialMap();
67 
68  // Provides access to JSFunction::context() field.
69  static FieldAccess ForJSFunctionContext();
70 
71  // Provides access to JSFunction::shared() field.
72  static FieldAccess ForJSFunctionSharedFunctionInfo();
73 
74  // Provides access to JSFunction::feedback_cell() field.
75  static FieldAccess ForJSFunctionFeedbackCell();
76 
77  // Provides access to JSFunction::code() field.
78  static FieldAccess ForJSFunctionCode();
79 
80  // Provides access to JSBoundFunction::bound_target_function() field.
81  static FieldAccess ForJSBoundFunctionBoundTargetFunction();
82 
83  // Provides access to JSBoundFunction::bound_this() field.
84  static FieldAccess ForJSBoundFunctionBoundThis();
85 
86  // Provides access to JSBoundFunction::bound_arguments() field.
87  static FieldAccess ForJSBoundFunctionBoundArguments();
88 
89  // Provides access to JSGeneratorObject::context() field.
90  static FieldAccess ForJSGeneratorObjectContext();
91 
92  // Provides access to JSGeneratorObject::continuation() field.
93  static FieldAccess ForJSGeneratorObjectContinuation();
94 
95  // Provides access to JSGeneratorObject::input_or_debug_pos() field.
96  static FieldAccess ForJSGeneratorObjectInputOrDebugPos();
97 
98  // Provides access to JSGeneratorObject::parameters_and_registers() field.
99  static FieldAccess ForJSGeneratorObjectParametersAndRegisters();
100 
101  // Provides access to JSGeneratorObject::function() field.
102  static FieldAccess ForJSGeneratorObjectFunction();
103 
104  // Provides access to JSGeneratorObject::receiver() field.
105  static FieldAccess ForJSGeneratorObjectReceiver();
106 
107  // Provides access to JSGeneratorObject::resume_mode() field.
108  static FieldAccess ForJSGeneratorObjectResumeMode();
109 
110  // Provides access to JSAsyncFunctionObject::promise() field.
111  static FieldAccess ForJSAsyncFunctionObjectPromise();
112 
113  // Provides access to JSAsyncGeneratorObject::queue() field.
114  static FieldAccess ForJSAsyncGeneratorObjectQueue();
115 
116  // Provides access to JSAsyncGeneratorObject::is_awaiting() field.
117  static FieldAccess ForJSAsyncGeneratorObjectIsAwaiting();
118 
119  // Provides access to JSArray::length() field.
120  static FieldAccess ForJSArrayLength(ElementsKind elements_kind);
121 
122  // Provides access to JSArrayBuffer::backing_store() field.
123  static FieldAccess ForJSArrayBufferBackingStore();
124 
125  // Provides access to JSArrayBuffer::bit_field() field.
126  static FieldAccess ForJSArrayBufferBitField();
127 
128  // Provides access to JSArrayBufferView::buffer() field.
129  static FieldAccess ForJSArrayBufferViewBuffer();
130 
131  // Provides access to JSArrayBufferView::byteLength() field.
132  static FieldAccess ForJSArrayBufferViewByteLength();
133 
134  // Provides access to JSArrayBufferView::byteOffset() field.
135  static FieldAccess ForJSArrayBufferViewByteOffset();
136 
137  // Provides access to JSTypedArray::length() field.
138  static FieldAccess ForJSTypedArrayLength();
139 
140  // Provides access to JSDate::value() field.
141  static FieldAccess ForJSDateValue();
142 
143  // Provides access to JSDate fields.
144  static FieldAccess ForJSDateField(JSDate::FieldIndex index);
145 
146  // Provides access to JSIteratorResult::done() field.
147  static FieldAccess ForJSIteratorResultDone();
148 
149  // Provides access to JSIteratorResult::value() field.
150  static FieldAccess ForJSIteratorResultValue();
151 
152  // Provides access to JSRegExp::data() field.
153  static FieldAccess ForJSRegExpData();
154 
155  // Provides access to JSRegExp::flags() field.
156  static FieldAccess ForJSRegExpFlags();
157 
158  // Provides access to JSRegExp::last_index() field.
159  static FieldAccess ForJSRegExpLastIndex();
160 
161  // Provides access to JSRegExp::source() field.
162  static FieldAccess ForJSRegExpSource();
163 
164  // Provides access to FixedArray::length() field.
165  static FieldAccess ForFixedArrayLength();
166 
167  // Provides access to PropertyArray::length() field.
168  static FieldAccess ForPropertyArrayLengthAndHash();
169 
170  // Provides access to FixedTypedArrayBase::base_pointer() field.
171  static FieldAccess ForFixedTypedArrayBaseBasePointer();
172 
173  // Provides access to FixedTypedArrayBase::external_pointer() field.
174  static FieldAccess ForFixedTypedArrayBaseExternalPointer();
175 
176  // Provides access to DescriptorArray::enum_cache() field.
177  static FieldAccess ForDescriptorArrayEnumCache();
178 
179  // Provides access to Map::bit_field() byte.
180  static FieldAccess ForMapBitField();
181 
182  // Provides access to Map::bit_field2() byte.
183  static FieldAccess ForMapBitField2();
184 
185  // Provides access to Map::bit_field3() field.
186  static FieldAccess ForMapBitField3();
187 
188  // Provides access to Map::descriptors() field.
189  static FieldAccess ForMapDescriptors();
190 
191  // Provides access to Map::instance_type() field.
192  static FieldAccess ForMapInstanceType();
193 
194  // Provides access to Map::prototype() field.
195  static FieldAccess ForMapPrototype();
196 
197  // Provides access to Module::regular_exports() field.
198  static FieldAccess ForModuleRegularExports();
199 
200  // Provides access to Module::regular_imports() field.
201  static FieldAccess ForModuleRegularImports();
202 
203  // Provides access to Name::hash_field() field.
204  static FieldAccess ForNameHashField();
205 
206  // Provides access to String::length() field.
207  static FieldAccess ForStringLength();
208 
209  // Provides access to ConsString::first() field.
210  static FieldAccess ForConsStringFirst();
211 
212  // Provides access to ConsString::second() field.
213  static FieldAccess ForConsStringSecond();
214 
215  // Provides access to ThinString::actual() field.
216  static FieldAccess ForThinStringActual();
217 
218  // Provides access to SlicedString::offset() field.
219  static FieldAccess ForSlicedStringOffset();
220 
221  // Provides access to SlicedString::parent() field.
222  static FieldAccess ForSlicedStringParent();
223 
224  // Provides access to ExternalString::resource_data() field.
225  static FieldAccess ForExternalStringResourceData();
226 
227  // Provides access to ExternalOneByteString characters.
228  static ElementAccess ForExternalOneByteStringCharacter();
229 
230  // Provides access to ExternalTwoByteString characters.
231  static ElementAccess ForExternalTwoByteStringCharacter();
232 
233  // Provides access to SeqOneByteString characters.
234  static ElementAccess ForSeqOneByteStringCharacter();
235 
236  // Provides access to SeqTwoByteString characters.
237  static ElementAccess ForSeqTwoByteStringCharacter();
238 
239  // Provides access to JSGlobalObject::global_proxy() field.
240  static FieldAccess ForJSGlobalObjectGlobalProxy();
241 
242  // Provides access to JSGlobalObject::native_context() field.
243  static FieldAccess ForJSGlobalObjectNativeContext();
244 
245  // Provides access to JSGlobalProxy::native_context() field.
246  static FieldAccess ForJSGlobalProxyNativeContext();
247 
248  // Provides access to JSArrayIterator::iterated_object() field.
249  static FieldAccess ForJSArrayIteratorIteratedObject();
250 
251  // Provides access to JSArrayIterator::next_index() field.
252  static FieldAccess ForJSArrayIteratorNextIndex();
253 
254  // Provides access to JSArrayIterator::kind() field.
255  static FieldAccess ForJSArrayIteratorKind();
256 
257  // Provides access to JSStringIterator::string() field.
258  static FieldAccess ForJSStringIteratorString();
259 
260  // Provides access to JSStringIterator::index() field.
261  static FieldAccess ForJSStringIteratorIndex();
262 
263  // Provides access to JSValue::value() field.
264  static FieldAccess ForValue();
265 
266  // Provides access to Cell::value() field.
267  static FieldAccess ForCellValue();
268 
269  // Provides access to arguments object fields.
270  static FieldAccess ForArgumentsLength();
271  static FieldAccess ForArgumentsCallee();
272 
273  // Provides access to FixedArray slots.
274  static FieldAccess ForFixedArraySlot(
275  size_t index, WriteBarrierKind write_barrier_kind = kFullWriteBarrier);
276 
277  // Provides access to Context slots.
278  static FieldAccess ForContextSlot(size_t index);
279 
280  // Provides access to FixedArray elements.
281  static ElementAccess ForFixedArrayElement();
282  static ElementAccess ForFixedArrayElement(
283  ElementsKind kind,
284  LoadSensitivity load_sensitivity = LoadSensitivity::kUnsafe);
285 
286  // Provides access to FixedDoubleArray elements.
287  static ElementAccess ForFixedDoubleArrayElement();
288 
289  // Provides access to EnumCache::keys() field.
290  static FieldAccess ForEnumCacheKeys();
291 
292  // Provides access to EnumCache::indices() field.
293  static FieldAccess ForEnumCacheIndices();
294 
295  // Provides access to Fixed{type}TypedArray and External{type}Array elements.
296  static ElementAccess ForTypedArrayElement(
297  ExternalArrayType type, bool is_external,
298  LoadSensitivity load_sensitivity = LoadSensitivity::kUnsafe);
299 
300  // Provides access to HashTable fields.
301  static FieldAccess ForHashTableBaseNumberOfElements();
302  static FieldAccess ForHashTableBaseNumberOfDeletedElement();
303  static FieldAccess ForHashTableBaseCapacity();
304 
305  // Provides access to OrderedHashMapOrSet fields.
306  static FieldAccess ForOrderedHashMapOrSetNextTable();
307  static FieldAccess ForOrderedHashMapOrSetNumberOfBuckets();
308  static FieldAccess ForOrderedHashMapOrSetNumberOfElements();
309  static FieldAccess ForOrderedHashMapOrSetNumberOfDeletedElements();
310 
311  // Provides access to OrderedHashMap elements.
312  static ElementAccess ForOrderedHashMapEntryValue();
313 
314  // Provides access to Dictionary fields.
315  static FieldAccess ForDictionaryMaxNumberKey();
316  static FieldAccess ForDictionaryNextEnumerationIndex();
317  static FieldAccess ForDictionaryObjectHashIndex();
318 
319  private:
320  DISALLOW_IMPLICIT_CONSTRUCTORS(AccessBuilder);
321 };
322 
323 } // namespace compiler
324 } // namespace internal
325 } // namespace v8
326 
327 #endif // V8_COMPILER_ACCESS_BUILDER_H_
Definition: libplatform.h:13