Home | History | Annotate | Download | only in compiler
      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/compiler/simplified-operator.h"
      9 
     10 namespace v8 {
     11 namespace internal {
     12 namespace compiler {
     13 
     14 // This access builder provides a set of static methods constructing commonly
     15 // used FieldAccess and ElementAccess descriptors. These descriptors server as
     16 // parameters to simplified load/store operators.
     17 class AccessBuilder FINAL : public AllStatic {
     18  public:
     19   // Provides access to HeapObject::map() field.
     20   static FieldAccess ForMap();
     21 
     22   // Provides access to JSObject::properties() field.
     23   static FieldAccess ForJSObjectProperties();
     24 
     25   // Provides access to JSObject::elements() field.
     26   static FieldAccess ForJSObjectElements();
     27 
     28   // Provides access to JSFunction::context() field.
     29   static FieldAccess ForJSFunctionContext();
     30 
     31   // Provides access to JSArrayBuffer::backing_store() field.
     32   static FieldAccess ForJSArrayBufferBackingStore();
     33 
     34   // Provides access to ExternalArray::external_pointer() field.
     35   static FieldAccess ForExternalArrayPointer();
     36 
     37   // Provides access to FixedArray elements.
     38   static ElementAccess ForFixedArrayElement();
     39 
     40   // TODO(mstarzinger): Raw access only for testing, drop me.
     41   static ElementAccess ForBackingStoreElement(MachineType rep);
     42 
     43   // Provides access to Fixed{type}TypedArray and External{type}Array elements.
     44   static ElementAccess ForTypedArrayElement(ExternalArrayType type,
     45                                             bool is_external);
     46 
     47  private:
     48   DISALLOW_IMPLICIT_CONSTRUCTORS(AccessBuilder);
     49 };
     50 
     51 }  // namespace compiler
     52 }  // namespace internal
     53 }  // namespace v8
     54 
     55 #endif  // V8_COMPILER_ACCESS_BUILDER_H_
     56