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 13 namespace v8 { 14 namespace internal { 15 namespace compiler { 16 17 // This access builder provides a set of static methods constructing commonly 18 // used FieldAccess and ElementAccess descriptors. These descriptors serve as 19 // parameters to simplified load/store operators. 20 class V8_EXPORT_PRIVATE AccessBuilder final NON_EXPORTED_BASE(AllStatic)21 : public NON_EXPORTED_BASE(AllStatic) { 22 public: 23 // =========================================================================== 24 // Access to external values (based on external references). 25 26 // Provides access to a double field identified by an external reference. 27 static FieldAccess ForExternalDoubleValue(); 28 29 // =========================================================================== 30 // Access to heap object fields and elements (based on tagged pointer). 31 32 // Provides access to HeapObject::map() field. 33 static FieldAccess ForMap(); 34 35 // Provides access to HeapNumber::value() field. 36 static FieldAccess ForHeapNumberValue(); 37 38 // Provides access to JSObject::properties() field. 39 static FieldAccess ForJSObjectProperties(); 40 41 // Provides access to JSObject::elements() field. 42 static FieldAccess ForJSObjectElements(); 43 44 // Provides access to JSObject inobject property fields. 45 static FieldAccess ForJSObjectInObjectProperty(Handle<Map> map, int index); 46 47 // Provides access to JSFunction::prototype_or_initial_map() field. 48 static FieldAccess ForJSFunctionPrototypeOrInitialMap(); 49 50 // Provides access to JSFunction::context() field. 51 static FieldAccess ForJSFunctionContext(); 52 53 // Provides access to JSFunction::shared() field. 54 static FieldAccess ForJSFunctionSharedFunctionInfo(); 55 56 // Provides access to JSFunction::literals() field. 57 static FieldAccess ForJSFunctionLiterals(); 58 59 // Provides access to JSFunction::code() field. 60 static FieldAccess ForJSFunctionCodeEntry(); 61 62 // Provides access to JSFunction::next_function_link() field. 63 static FieldAccess ForJSFunctionNextFunctionLink(); 64 65 // Provides access to JSGeneratorObject::context() field. 66 static FieldAccess ForJSGeneratorObjectContext(); 67 68 // Provides access to JSGeneratorObject::continuation() field. 69 static FieldAccess ForJSGeneratorObjectContinuation(); 70 71 // Provides access to JSGeneratorObject::input_or_debug_pos() field. 72 static FieldAccess ForJSGeneratorObjectInputOrDebugPos(); 73 74 // Provides access to JSGeneratorObject::operand_stack() field. 75 static FieldAccess ForJSGeneratorObjectOperandStack(); 76 77 // Provides access to JSGeneratorObject::resume_mode() field. 78 static FieldAccess ForJSGeneratorObjectResumeMode(); 79 80 // Provides access to JSArray::length() field. 81 static FieldAccess ForJSArrayLength(ElementsKind elements_kind); 82 83 // Provides access to JSArrayBuffer::backing_store() field. 84 static FieldAccess ForJSArrayBufferBackingStore(); 85 86 // Provides access to JSArrayBuffer::bit_field() field. 87 static FieldAccess ForJSArrayBufferBitField(); 88 89 // Provides access to JSArrayBufferView::buffer() field. 90 static FieldAccess ForJSArrayBufferViewBuffer(); 91 92 // Provides access to JSArrayBufferView::byteLength() field. 93 static FieldAccess ForJSArrayBufferViewByteLength(); 94 95 // Provides access to JSArrayBufferView::byteOffset() field. 96 static FieldAccess ForJSArrayBufferViewByteOffset(); 97 98 // Provides access to JSTypedArray::length() field. 99 static FieldAccess ForJSTypedArrayLength(); 100 101 // Provides access to JSDate::value() field. 102 static FieldAccess ForJSDateValue(); 103 104 // Provides access to JSDate fields. 105 static FieldAccess ForJSDateField(JSDate::FieldIndex index); 106 107 // Provides access to JSIteratorResult::done() field. 108 static FieldAccess ForJSIteratorResultDone(); 109 110 // Provides access to JSIteratorResult::value() field. 111 static FieldAccess ForJSIteratorResultValue(); 112 113 // Provides access to JSRegExp::flags() field. 114 static FieldAccess ForJSRegExpFlags(); 115 116 // Provides access to JSRegExp::source() field. 117 static FieldAccess ForJSRegExpSource(); 118 119 // Provides access to FixedArray::length() field. 120 static FieldAccess ForFixedArrayLength(); 121 122 // Provides access to FixedTypedArrayBase::base_pointer() field. 123 static FieldAccess ForFixedTypedArrayBaseBasePointer(); 124 125 // Provides access to FixedTypedArrayBase::external_pointer() field. 126 static FieldAccess ForFixedTypedArrayBaseExternalPointer(); 127 128 // Provides access to DescriptorArray::enum_cache() field. 129 static FieldAccess ForDescriptorArrayEnumCache(); 130 131 // Provides access to DescriptorArray::enum_cache_bridge_cache() field. 132 static FieldAccess ForDescriptorArrayEnumCacheBridgeCache(); 133 134 // Provides access to Map::bit_field() byte. 135 static FieldAccess ForMapBitField(); 136 137 // Provides access to Map::bit_field3() field. 138 static FieldAccess ForMapBitField3(); 139 140 // Provides access to Map::descriptors() field. 141 static FieldAccess ForMapDescriptors(); 142 143 // Provides access to Map::instance_type() field. 144 static FieldAccess ForMapInstanceType(); 145 146 // Provides access to Map::prototype() field. 147 static FieldAccess ForMapPrototype(); 148 149 // Provides access to Module::regular_exports() field. 150 static FieldAccess ForModuleRegularExports(); 151 152 // Provides access to Module::regular_imports() field. 153 static FieldAccess ForModuleRegularImports(); 154 155 // Provides access to Name::hash_field() field. 156 static FieldAccess ForNameHashField(); 157 158 // Provides access to String::length() field. 159 static FieldAccess ForStringLength(); 160 161 // Provides access to ConsString::first() field. 162 static FieldAccess ForConsStringFirst(); 163 164 // Provides access to ConsString::second() field. 165 static FieldAccess ForConsStringSecond(); 166 167 // Provides access to SlicedString::offset() field. 168 static FieldAccess ForSlicedStringOffset(); 169 170 // Provides access to SlicedString::parent() field. 171 static FieldAccess ForSlicedStringParent(); 172 173 // Provides access to ExternalString::resource_data() field. 174 static FieldAccess ForExternalStringResourceData(); 175 176 // Provides access to ExternalOneByteString characters. 177 static ElementAccess ForExternalOneByteStringCharacter(); 178 179 // Provides access to ExternalTwoByteString characters. 180 static ElementAccess ForExternalTwoByteStringCharacter(); 181 182 // Provides access to SeqOneByteString characters. 183 static ElementAccess ForSeqOneByteStringCharacter(); 184 185 // Provides access to SeqTwoByteString characters. 186 static ElementAccess ForSeqTwoByteStringCharacter(); 187 188 // Provides access to JSGlobalObject::global_proxy() field. 189 static FieldAccess ForJSGlobalObjectGlobalProxy(); 190 191 // Provides access to JSGlobalObject::native_context() field. 192 static FieldAccess ForJSGlobalObjectNativeContext(); 193 194 // Provides access to JSArrayIterator::object() field. 195 static FieldAccess ForJSArrayIteratorObject(); 196 197 // Provides access to JSArrayIterator::index() field. 198 static FieldAccess ForJSArrayIteratorIndex(InstanceType type = JS_OBJECT_TYPE, 199 ElementsKind kind = NO_ELEMENTS); 200 201 // Provides access to JSArrayIterator::object_map() field. 202 static FieldAccess ForJSArrayIteratorObjectMap(); 203 204 // Provides access to JSStringIterator::string() field. 205 static FieldAccess ForJSStringIteratorString(); 206 207 // Provides access to JSStringIterator::index() field. 208 static FieldAccess ForJSStringIteratorIndex(); 209 210 // Provides access to JSValue::value() field. 211 static FieldAccess ForValue(); 212 213 // Provides access to Cell::value() field. 214 static FieldAccess ForCellValue(); 215 216 // Provides access to arguments object fields. 217 static FieldAccess ForArgumentsLength(); 218 static FieldAccess ForArgumentsCallee(); 219 220 // Provides access to FixedArray slots. 221 static FieldAccess ForFixedArraySlot(size_t index); 222 223 // Provides access to Context slots. 224 static FieldAccess ForContextSlot(size_t index); 225 226 // Provides access to ContextExtension fields. 227 static FieldAccess ForContextExtensionScopeInfo(); 228 static FieldAccess ForContextExtensionExtension(); 229 230 // Provides access to FixedArray elements. 231 static ElementAccess ForFixedArrayElement(); 232 static ElementAccess ForFixedArrayElement(ElementsKind kind); 233 234 // Provides access to FixedDoubleArray elements. 235 static ElementAccess ForFixedDoubleArrayElement(); 236 237 // Provides access to Fixed{type}TypedArray and External{type}Array elements. 238 static ElementAccess ForTypedArrayElement(ExternalArrayType type, 239 bool is_external); 240 241 private: 242 DISALLOW_IMPLICIT_CONSTRUCTORS(AccessBuilder); 243 }; 244 245 } // namespace compiler 246 } // namespace internal 247 } // namespace v8 248 249 #endif // V8_COMPILER_ACCESS_BUILDER_H_ 250