V8 Project
v8::internal::StaticVisitorBase Class Reference

#include <objects-visiting.h>

+ Inheritance diagram for v8::internal::StaticVisitorBase:
+ Collaboration diagram for v8::internal::StaticVisitorBase:

Public Types

enum  VisitorId {
  kVisitorIdCount , kVisitDataObject = kVisitDataObject2 , kVisitJSObject = kVisitJSObject2 , kVisitStruct = kVisitStruct2 ,
  kMinObjectSizeInWords = 2
}
 

Public Member Functions

 STATIC_ASSERT (kVisitorIdCount<=256)
 

Static Public Member Functions

static VisitorId GetVisitorId (int instance_type, int instance_size)
 
static VisitorId GetVisitorId (Map *map)
 
static VisitorId GetVisitorIdForSize (VisitorId base, VisitorId generic, int object_size)
 

Detailed Description

Definition at line 24 of file objects-visiting.h.

Member Enumeration Documentation

◆ VisitorId

Enumerator
kVisitorIdCount 
kVisitDataObject 
kVisitJSObject 
kVisitStruct 
kMinObjectSizeInWords 

Definition at line 91 of file objects-visiting.h.

91  {
92 #define VISITOR_ID_ENUM_DECL(id) kVisit##id,
94 #undef VISITOR_ID_ENUM_DECL
96  kVisitDataObject = kVisitDataObject2,
97  kVisitJSObject = kVisitJSObject2,
98  kVisitStruct = kVisitStruct2,
100  };
#define VISITOR_ID_LIST(V)
#define VISITOR_ID_ENUM_DECL(id)

Member Function Documentation

◆ GetVisitorId() [1/2]

StaticVisitorBase::VisitorId v8::internal::StaticVisitorBase::GetVisitorId ( int  instance_type,
int  instance_size 
)
static

Definition at line 13 of file objects-visiting.cc.

14  {
15  if (instance_type < FIRST_NONSTRING_TYPE) {
16  switch (instance_type & kStringRepresentationMask) {
17  case kSeqStringTag:
18  if ((instance_type & kStringEncodingMask) == kOneByteStringTag) {
19  return kVisitSeqOneByteString;
20  } else {
21  return kVisitSeqTwoByteString;
22  }
23 
24  case kConsStringTag:
25  if (IsShortcutCandidate(instance_type)) {
26  return kVisitShortcutCandidate;
27  } else {
28  return kVisitConsString;
29  }
30 
31  case kSlicedStringTag:
32  return kVisitSlicedString;
33 
34  case kExternalStringTag:
35  return GetVisitorIdForSize(kVisitDataObject, kVisitDataObjectGeneric,
36  instance_size);
37  }
38  UNREACHABLE();
39  }
40 
41  switch (instance_type) {
42  case BYTE_ARRAY_TYPE:
43  return kVisitByteArray;
44 
45  case FREE_SPACE_TYPE:
46  return kVisitFreeSpace;
47 
48  case FIXED_ARRAY_TYPE:
49  return kVisitFixedArray;
50 
52  return kVisitFixedDoubleArray;
53 
55  return kVisitConstantPoolArray;
56 
57  case ODDBALL_TYPE:
58  return kVisitOddball;
59 
60  case MAP_TYPE:
61  return kVisitMap;
62 
63  case CODE_TYPE:
64  return kVisitCode;
65 
66  case CELL_TYPE:
67  return kVisitCell;
68 
69  case PROPERTY_CELL_TYPE:
70  return kVisitPropertyCell;
71 
72  case JS_SET_TYPE:
73  return GetVisitorIdForSize(kVisitStruct, kVisitStructGeneric,
74  JSSet::kSize);
75 
76  case JS_MAP_TYPE:
77  return GetVisitorIdForSize(kVisitStruct, kVisitStructGeneric,
78  JSMap::kSize);
79 
80  case JS_WEAK_MAP_TYPE:
81  case JS_WEAK_SET_TYPE:
82  return kVisitJSWeakCollection;
83 
84  case JS_REGEXP_TYPE:
85  return kVisitJSRegExp;
86 
88  return kVisitSharedFunctionInfo;
89 
90  case JS_PROXY_TYPE:
91  return GetVisitorIdForSize(kVisitStruct, kVisitStructGeneric,
93 
95  return GetVisitorIdForSize(kVisitStruct, kVisitStructGeneric,
97 
98  case FOREIGN_TYPE:
99  return GetVisitorIdForSize(kVisitDataObject, kVisitDataObjectGeneric,
101 
102  case SYMBOL_TYPE:
103  return kVisitSymbol;
104 
105  case FILLER_TYPE:
106  return kVisitDataObjectGeneric;
107 
109  return kVisitJSArrayBuffer;
110 
111  case JS_TYPED_ARRAY_TYPE:
112  return kVisitJSTypedArray;
113 
114  case JS_DATA_VIEW_TYPE:
115  return kVisitJSDataView;
116 
117  case JS_OBJECT_TYPE:
120  case JS_MODULE_TYPE:
121  case JS_VALUE_TYPE:
122  case JS_DATE_TYPE:
123  case JS_ARRAY_TYPE:
130  return GetVisitorIdForSize(kVisitJSObject, kVisitJSObjectGeneric,
131  instance_size);
132 
133  case JS_FUNCTION_TYPE:
134  return kVisitJSFunction;
135 
136  case HEAP_NUMBER_TYPE:
138 #define EXTERNAL_ARRAY_CASE(Type, type, TYPE, ctype, size) \
139  case EXTERNAL_##TYPE##_ARRAY_TYPE:
140 
142  return GetVisitorIdForSize(kVisitDataObject, kVisitDataObjectGeneric,
143  instance_size);
144 #undef EXTERNAL_ARRAY_CASE
145 
154  return kVisitFixedTypedArray;
155 
157  return kVisitFixedFloat64Array;
158 
159 #define MAKE_STRUCT_CASE(NAME, Name, name) case NAME##_TYPE:
161 #undef MAKE_STRUCT_CASE
162  if (instance_type == ALLOCATION_SITE_TYPE) {
163  return kVisitAllocationSite;
164  }
165 
166  return GetVisitorIdForSize(kVisitStruct, kVisitStructGeneric,
167  instance_size);
168 
169  default:
170  UNREACHABLE();
171  return kVisitorIdCount;
172  }
173 }
static const int kSize
Definition: objects.h:10005
static const int kSize
Definition: objects.h:9657
static const int kSize
Definition: objects.h:9637
static const int kSize
Definition: objects.h:9577
static VisitorId GetVisitorIdForSize(VisitorId base, VisitorId generic, int object_size)
#define UNREACHABLE()
Definition: logging.h:30
const uint32_t kStringEncodingMask
Definition: objects.h:555
@ kSeqStringTag
Definition: objects.h:563
@ kConsStringTag
Definition: objects.h:564
@ kSlicedStringTag
Definition: objects.h:566
@ kExternalStringTag
Definition: objects.h:565
@ JS_REGEXP_TYPE
Definition: objects.h:748
@ FIXED_UINT8_ARRAY_TYPE
Definition: objects.h:684
@ JS_VALUE_TYPE
Definition: objects.h:728
@ JS_DATE_TYPE
Definition: objects.h:730
@ JS_GLOBAL_PROXY_TYPE
Definition: objects.h:737
@ FIXED_DOUBLE_ARRAY_TYPE
Definition: objects.h:692
@ JS_ARRAY_TYPE
Definition: objects.h:738
@ FIXED_ARRAY_TYPE
Definition: objects.h:717
@ JS_MODULE_TYPE
Definition: objects.h:734
@ JS_OBJECT_TYPE
Definition: objects.h:731
@ JS_TYPED_ARRAY_TYPE
Definition: objects.h:740
@ FIRST_NONSTRING_TYPE
Definition: objects.h:758
@ JS_DATA_VIEW_TYPE
Definition: objects.h:741
@ FIXED_INT8_ARRAY_TYPE
Definition: objects.h:683
@ PROPERTY_CELL_TYPE
Definition: objects.h:665
@ FREE_SPACE_TYPE
Definition: objects.h:673
@ JS_GENERATOR_OBJECT_TYPE
Definition: objects.h:733
@ BYTE_ARRAY_TYPE
Definition: objects.h:672
@ FIXED_INT32_ARRAY_TYPE
Definition: objects.h:687
@ FIXED_UINT16_ARRAY_TYPE
Definition: objects.h:686
@ JS_WEAK_SET_TYPE
Definition: objects.h:747
@ ODDBALL_TYPE
Definition: objects.h:663
@ ALLOCATION_SITE_TYPE
Definition: objects.h:707
@ JS_CONTEXT_EXTENSION_OBJECT_TYPE
Definition: objects.h:732
@ MUTABLE_HEAP_NUMBER_TYPE
Definition: objects.h:670
@ HEAP_NUMBER_TYPE
Definition: objects.h:669
@ JS_MAP_ITERATOR_TYPE
Definition: objects.h:745
@ JS_MESSAGE_OBJECT_TYPE
Definition: objects.h:729
@ JS_FUNCTION_TYPE
Definition: objects.h:749
@ JS_FUNCTION_PROXY_TYPE
Definition: objects.h:726
@ SHARED_FUNCTION_INFO_TYPE
Definition: objects.h:719
@ JS_SET_ITERATOR_TYPE
Definition: objects.h:744
@ JS_GLOBAL_OBJECT_TYPE
Definition: objects.h:735
@ FIXED_FLOAT32_ARRAY_TYPE
Definition: objects.h:689
@ JS_ARRAY_BUFFER_TYPE
Definition: objects.h:739
@ JS_PROXY_TYPE
Definition: objects.h:727
@ FIXED_UINT32_ARRAY_TYPE
Definition: objects.h:688
@ FIXED_UINT8_CLAMPED_ARRAY_TYPE
Definition: objects.h:691
@ JS_BUILTINS_OBJECT_TYPE
Definition: objects.h:736
@ CONSTANT_POOL_ARRAY_TYPE
Definition: objects.h:718
@ FIXED_FLOAT64_ARRAY_TYPE
Definition: objects.h:690
@ FIXED_INT16_ARRAY_TYPE
Definition: objects.h:685
@ FOREIGN_TYPE
Definition: objects.h:671
@ JS_WEAK_MAP_TYPE
Definition: objects.h:746
const uint32_t kOneByteStringTag
Definition: objects.h:557
static bool IsShortcutCandidate(int type)
Definition: objects.h:605
const uint32_t kStringRepresentationMask
Definition: objects.h:561
#define EXTERNAL_ARRAY_CASE(Type, type, TYPE, ctype, size)
#define MAKE_STRUCT_CASE(NAME, Name, name)
#define STRUCT_LIST(V)
Definition: objects.h:515
#define TYPED_ARRAYS(V)
Definition: objects.h:4433

References v8::internal::ALLOCATION_SITE_TYPE, v8::internal::BYTE_ARRAY_TYPE, v8::internal::CELL_TYPE, v8::internal::CODE_TYPE, v8::internal::CONSTANT_POOL_ARRAY_TYPE, EXTERNAL_ARRAY_CASE, v8::internal::FILLER_TYPE, v8::internal::FIRST_NONSTRING_TYPE, v8::internal::FIXED_ARRAY_TYPE, v8::internal::FIXED_DOUBLE_ARRAY_TYPE, v8::internal::FIXED_FLOAT32_ARRAY_TYPE, v8::internal::FIXED_FLOAT64_ARRAY_TYPE, v8::internal::FIXED_INT16_ARRAY_TYPE, v8::internal::FIXED_INT32_ARRAY_TYPE, v8::internal::FIXED_INT8_ARRAY_TYPE, v8::internal::FIXED_UINT16_ARRAY_TYPE, v8::internal::FIXED_UINT32_ARRAY_TYPE, v8::internal::FIXED_UINT8_ARRAY_TYPE, v8::internal::FIXED_UINT8_CLAMPED_ARRAY_TYPE, v8::internal::FOREIGN_TYPE, v8::internal::FREE_SPACE_TYPE, GetVisitorIdForSize(), v8::internal::HEAP_NUMBER_TYPE, v8::internal::IsShortcutCandidate(), v8::internal::JS_ARRAY_BUFFER_TYPE, v8::internal::JS_ARRAY_TYPE, v8::internal::JS_BUILTINS_OBJECT_TYPE, v8::internal::JS_CONTEXT_EXTENSION_OBJECT_TYPE, v8::internal::JS_DATA_VIEW_TYPE, v8::internal::JS_DATE_TYPE, v8::internal::JS_FUNCTION_PROXY_TYPE, v8::internal::JS_FUNCTION_TYPE, v8::internal::JS_GENERATOR_OBJECT_TYPE, v8::internal::JS_GLOBAL_OBJECT_TYPE, v8::internal::JS_GLOBAL_PROXY_TYPE, v8::internal::JS_MAP_ITERATOR_TYPE, v8::internal::JS_MAP_TYPE, v8::internal::JS_MESSAGE_OBJECT_TYPE, v8::internal::JS_MODULE_TYPE, v8::internal::JS_OBJECT_TYPE, v8::internal::JS_PROXY_TYPE, v8::internal::JS_REGEXP_TYPE, v8::internal::JS_SET_ITERATOR_TYPE, v8::internal::JS_SET_TYPE, v8::internal::JS_TYPED_ARRAY_TYPE, v8::internal::JS_VALUE_TYPE, v8::internal::JS_WEAK_MAP_TYPE, v8::internal::JS_WEAK_SET_TYPE, v8::internal::kConsStringTag, v8::internal::kExternalStringTag, v8::internal::kOneByteStringTag, v8::internal::kSeqStringTag, v8::internal::JSProxy::kSize, v8::internal::JSFunctionProxy::kSize, v8::internal::JSCollection::kSize, v8::internal::Foreign::kSize, v8::internal::kSlicedStringTag, v8::internal::kStringEncodingMask, v8::internal::kStringRepresentationMask, kVisitDataObject, kVisitJSObject, kVisitorIdCount, kVisitStruct, MAKE_STRUCT_CASE, v8::internal::MAP_TYPE, v8::internal::MUTABLE_HEAP_NUMBER_TYPE, v8::internal::ODDBALL_TYPE, v8::internal::PROPERTY_CELL_TYPE, v8::internal::SHARED_FUNCTION_INFO_TYPE, STRUCT_LIST, v8::internal::SYMBOL_TYPE, TYPED_ARRAYS, and UNREACHABLE.

Referenced by v8::internal::Heap::AllocateMap(), v8::internal::Heap::AllocatePartialMap(), v8::internal::Map::Create(), GetVisitorId(), and v8::internal::ShrinkInstanceSize().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ GetVisitorId() [2/2]

static VisitorId v8::internal::StaticVisitorBase::GetVisitorId ( Map map)
inlinestatic

Definition at line 109 of file objects-visiting.h.

109  {
110  return GetVisitorId(map->instance_type(), map->instance_size());
111  }
static VisitorId GetVisitorId(int instance_type, int instance_size)
enable harmony numeric enable harmony object literal extensions Optimize object Array DOM strings and string trace pretenuring decisions of HAllocate instructions Enables optimizations which favor memory size over execution speed maximum source size in bytes considered for a single inlining maximum cumulative number of AST nodes considered for inlining trace the tracking of allocation sites deoptimize every n garbage collections perform array bounds checks elimination analyze liveness of environment slots and zap dead values flushes the cache of optimized code for closures on every GC allow uint32 values on optimize frames if they are used only in safe operations track concurrent recompilation artificial compilation delay in ms do not emit check maps for constant values that have a leaf map

References GetVisitorId(), and map.

+ Here is the call graph for this function:

◆ GetVisitorIdForSize()

static VisitorId v8::internal::StaticVisitorBase::GetVisitorIdForSize ( VisitorId  base,
VisitorId  generic,
int  object_size 
)
inlinestatic

Definition at line 115 of file objects-visiting.h.

116  {
117  DCHECK((base == kVisitDataObject) || (base == kVisitStruct) ||
118  (base == kVisitJSObject));
119  DCHECK(IsAligned(object_size, kPointerSize));
120  DCHECK(kMinObjectSizeInWords * kPointerSize <= object_size);
121  DCHECK(object_size <= Page::kMaxRegularHeapObjectSize);
122 
123  const VisitorId specialization = static_cast<VisitorId>(
124  base + (object_size >> kPointerSizeLog2) - kMinObjectSizeInWords);
125 
126  return Min(specialization, generic);
127  }
static const int kMaxRegularHeapObjectSize
Definition: spaces.h:754
#define DCHECK(condition)
Definition: logging.h:205
const int kPointerSize
Definition: globals.h:129
static LifetimePosition Min(LifetimePosition a, LifetimePosition b)
const int kPointerSizeLog2
Definition: globals.h:147
bool IsAligned(T value, U alignment)
Definition: utils.h:123

References DCHECK, v8::internal::IsAligned(), v8::internal::Page::kMaxRegularHeapObjectSize, kMinObjectSizeInWords, v8::internal::kPointerSize, v8::internal::kPointerSizeLog2, kVisitDataObject, kVisitJSObject, kVisitStruct, and v8::internal::Min().

Referenced by GetVisitorId(), and v8::internal::VisitorDispatchTable< Callback >::RegisterSpecialization().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ STATIC_ASSERT()

v8::internal::StaticVisitorBase::STATIC_ASSERT ( kVisitorIdCount<=  256)

The documentation for this class was generated from the following files: