5 #ifndef V8_OBJECTS_INSTANCE_TYPE_H_ 6 #define V8_OBJECTS_INSTANCE_TYPE_H_ 8 #include "src/elements-kind.h" 9 #include "src/objects-definitions.h" 12 #include "src/objects/object-macros.h" 20 const uint32_t kIsNotStringMask = 0xff80;
25 const uint32_t kIsNotInternalizedMask = 0x40;
26 const uint32_t kNotInternalizedTag = 0x40;
27 const uint32_t kInternalizedTag = 0x0;
31 const uint32_t kStringEncodingMask = 0x8;
32 const uint32_t kTwoByteStringTag = 0x0;
33 const uint32_t kOneByteStringTag = 0x8;
37 const uint32_t kStringRepresentationMask = 0x07;
38 enum StringRepresentationTag {
41 kExternalStringTag = 0x2,
42 kSlicedStringTag = 0x3,
45 const uint32_t kIsIndirectStringMask = 0x1;
46 const uint32_t kIsIndirectStringTag = 0x1;
47 STATIC_ASSERT((kSeqStringTag & kIsIndirectStringMask) == 0);
48 STATIC_ASSERT((kExternalStringTag & kIsIndirectStringMask) == 0);
49 STATIC_ASSERT((kConsStringTag & kIsIndirectStringMask) ==
50 kIsIndirectStringTag);
51 STATIC_ASSERT((kSlicedStringTag & kIsIndirectStringMask) ==
52 kIsIndirectStringTag);
53 STATIC_ASSERT((kThinStringTag & kIsIndirectStringMask) == kIsIndirectStringTag);
57 const uint32_t kOneByteDataHintMask = 0x10;
58 const uint32_t kOneByteDataHintTag = 0x10;
62 const uint32_t kUncachedExternalStringMask = 0x20;
63 const uint32_t kUncachedExternalStringTag = 0x20;
72 kIsNotStringMask | kIsNotInternalizedMask | kStringRepresentationMask;
73 const uint32_t kShortcutTypeTag = kConsStringTag | kNotInternalizedTag;
75 static inline bool IsShortcutCandidate(
int type) {
76 return ((type & kShortcutTypeMask) == kShortcutTypeTag);
79 enum InstanceType : uint16_t {
81 INTERNALIZED_STRING_TYPE = kTwoByteStringTag | kSeqStringTag |
83 ONE_BYTE_INTERNALIZED_STRING_TYPE =
84 kOneByteStringTag | kSeqStringTag | kInternalizedTag,
85 EXTERNAL_INTERNALIZED_STRING_TYPE =
86 kTwoByteStringTag | kExternalStringTag | kInternalizedTag,
87 EXTERNAL_ONE_BYTE_INTERNALIZED_STRING_TYPE =
88 kOneByteStringTag | kExternalStringTag | kInternalizedTag,
89 EXTERNAL_INTERNALIZED_STRING_WITH_ONE_BYTE_DATA_TYPE =
90 EXTERNAL_INTERNALIZED_STRING_TYPE | kOneByteDataHintTag |
92 UNCACHED_EXTERNAL_INTERNALIZED_STRING_TYPE =
93 EXTERNAL_INTERNALIZED_STRING_TYPE | kUncachedExternalStringTag |
95 UNCACHED_EXTERNAL_ONE_BYTE_INTERNALIZED_STRING_TYPE =
96 EXTERNAL_ONE_BYTE_INTERNALIZED_STRING_TYPE | kUncachedExternalStringTag |
98 UNCACHED_EXTERNAL_INTERNALIZED_STRING_WITH_ONE_BYTE_DATA_TYPE =
99 EXTERNAL_INTERNALIZED_STRING_WITH_ONE_BYTE_DATA_TYPE |
100 kUncachedExternalStringTag | kInternalizedTag,
101 STRING_TYPE = INTERNALIZED_STRING_TYPE | kNotInternalizedTag,
102 ONE_BYTE_STRING_TYPE =
103 ONE_BYTE_INTERNALIZED_STRING_TYPE | kNotInternalizedTag,
104 CONS_STRING_TYPE = kTwoByteStringTag | kConsStringTag | kNotInternalizedTag,
105 CONS_ONE_BYTE_STRING_TYPE =
106 kOneByteStringTag | kConsStringTag | kNotInternalizedTag,
108 kTwoByteStringTag | kSlicedStringTag | kNotInternalizedTag,
109 SLICED_ONE_BYTE_STRING_TYPE =
110 kOneByteStringTag | kSlicedStringTag | kNotInternalizedTag,
111 EXTERNAL_STRING_TYPE =
112 EXTERNAL_INTERNALIZED_STRING_TYPE | kNotInternalizedTag,
113 EXTERNAL_ONE_BYTE_STRING_TYPE =
114 EXTERNAL_ONE_BYTE_INTERNALIZED_STRING_TYPE | kNotInternalizedTag,
115 EXTERNAL_STRING_WITH_ONE_BYTE_DATA_TYPE =
116 EXTERNAL_INTERNALIZED_STRING_WITH_ONE_BYTE_DATA_TYPE |
118 UNCACHED_EXTERNAL_STRING_TYPE =
119 UNCACHED_EXTERNAL_INTERNALIZED_STRING_TYPE | kNotInternalizedTag,
120 UNCACHED_EXTERNAL_ONE_BYTE_STRING_TYPE =
121 UNCACHED_EXTERNAL_ONE_BYTE_INTERNALIZED_STRING_TYPE | kNotInternalizedTag,
122 UNCACHED_EXTERNAL_STRING_WITH_ONE_BYTE_DATA_TYPE =
123 UNCACHED_EXTERNAL_INTERNALIZED_STRING_WITH_ONE_BYTE_DATA_TYPE |
125 THIN_STRING_TYPE = kTwoByteStringTag | kThinStringTag | kNotInternalizedTag,
126 THIN_ONE_BYTE_STRING_TYPE =
127 kOneByteStringTag | kThinStringTag | kNotInternalizedTag,
131 1 + (kIsNotInternalizedMask | kUncachedExternalStringMask |
132 kOneByteDataHintMask | kStringEncodingMask |
133 kStringRepresentationMask),
146 MUTABLE_HEAP_NUMBER_TYPE,
151 FIXED_INT8_ARRAY_TYPE,
152 FIXED_UINT8_ARRAY_TYPE,
153 FIXED_INT16_ARRAY_TYPE,
154 FIXED_UINT16_ARRAY_TYPE,
155 FIXED_INT32_ARRAY_TYPE,
156 FIXED_UINT32_ARRAY_TYPE,
157 FIXED_FLOAT32_ARRAY_TYPE,
158 FIXED_FLOAT64_ARRAY_TYPE,
159 FIXED_UINT8_CLAMPED_ARRAY_TYPE,
160 FIXED_BIGINT64_ARRAY_TYPE,
161 FIXED_BIGUINT64_ARRAY_TYPE,
162 FIXED_DOUBLE_ARRAY_TYPE,
163 FEEDBACK_METADATA_TYPE,
167 ACCESS_CHECK_INFO_TYPE,
170 ALIASED_ARGUMENTS_ENTRY_TYPE,
171 ALLOCATION_MEMENTO_TYPE,
173 ASYNC_GENERATOR_REQUEST_TYPE,
175 FUNCTION_TEMPLATE_INFO_TYPE,
176 FUNCTION_TEMPLATE_RARE_DATA_TYPE,
177 INTERCEPTOR_INFO_TYPE,
178 INTERPRETER_DATA_TYPE,
179 MODULE_INFO_ENTRY_TYPE,
181 OBJECT_TEMPLATE_INFO_TYPE,
182 PROMISE_CAPABILITY_TYPE,
183 PROMISE_REACTION_TYPE,
186 STACK_FRAME_INFO_TYPE,
189 ARRAY_BOILERPLATE_DESCRIPTION_TYPE,
190 WASM_DEBUG_INFO_TYPE,
191 WASM_EXPORTED_FUNCTION_DATA_TYPE,
195 PROMISE_FULFILL_REACTION_JOB_TASK_TYPE,
196 PROMISE_REJECT_REACTION_JOB_TASK_TYPE,
197 PROMISE_RESOLVE_THENABLE_JOB_TASK_TYPE,
198 WEAK_FACTORY_CLEANUP_JOB_TASK_TYPE,
200 ALLOCATION_SITE_TYPE,
201 EMBEDDER_DATA_ARRAY_TYPE,
204 OBJECT_BOILERPLATE_DESCRIPTION_TYPE,
206 ORDERED_HASH_MAP_TYPE,
207 ORDERED_HASH_SET_TYPE,
208 ORDERED_NAME_DICTIONARY_TYPE,
209 NAME_DICTIONARY_TYPE,
210 GLOBAL_DICTIONARY_TYPE,
211 NUMBER_DICTIONARY_TYPE,
212 SIMPLE_NUMBER_DICTIONARY_TYPE,
214 EPHEMERON_HASH_TABLE_TYPE,
216 SCRIPT_CONTEXT_TABLE_TYPE,
222 DEBUG_EVALUATE_CONTEXT_TYPE,
224 FUNCTION_CONTEXT_TYPE,
230 WEAK_FIXED_ARRAY_TYPE,
231 TRANSITION_ARRAY_TYPE,
234 CALL_HANDLER_INFO_TYPE,
236 CODE_DATA_CONTAINER_TYPE,
237 DESCRIPTOR_ARRAY_TYPE,
239 FEEDBACK_VECTOR_TYPE,
241 PRE_PARSED_SCOPE_DATA_TYPE,
244 SHARED_FUNCTION_INFO_TYPE,
245 SMALL_ORDERED_HASH_MAP_TYPE,
246 SMALL_ORDERED_HASH_SET_TYPE,
247 SMALL_ORDERED_NAME_DICTIONARY_TYPE,
249 UNCOMPILED_DATA_WITHOUT_PRE_PARSED_SCOPE_TYPE,
250 UNCOMPILED_DATA_WITH_PRE_PARSED_SCOPE_TYPE,
251 WEAK_ARRAY_LIST_TYPE,
260 JS_PROXY_TYPE = 0x0400,
261 JS_GLOBAL_OBJECT_TYPE,
262 JS_GLOBAL_PROXY_TYPE,
263 JS_MODULE_NAMESPACE_TYPE,
266 JS_SPECIAL_API_OBJECT_TYPE = 0x0410,
269 JS_API_OBJECT_TYPE = 0x0420,
272 JS_ARRAY_BUFFER_TYPE,
273 JS_ARRAY_ITERATOR_TYPE,
275 JS_ASYNC_FROM_SYNC_ITERATOR_TYPE,
276 JS_ASYNC_FUNCTION_OBJECT_TYPE,
277 JS_ASYNC_GENERATOR_OBJECT_TYPE,
278 JS_CONTEXT_EXTENSION_OBJECT_TYPE,
281 JS_GENERATOR_OBJECT_TYPE,
283 JS_MAP_KEY_ITERATOR_TYPE,
284 JS_MAP_KEY_VALUE_ITERATOR_TYPE,
285 JS_MAP_VALUE_ITERATOR_TYPE,
286 JS_MESSAGE_OBJECT_TYPE,
289 JS_REGEXP_STRING_ITERATOR_TYPE,
291 JS_SET_KEY_VALUE_ITERATOR_TYPE,
292 JS_SET_VALUE_ITERATOR_TYPE,
293 JS_STRING_ITERATOR_TYPE,
296 JS_WEAK_FACTORY_CLEANUP_ITERATOR_TYPE,
297 JS_WEAK_FACTORY_TYPE,
304 #ifdef V8_INTL_SUPPORT
305 JS_INTL_V8_BREAK_ITERATOR_TYPE,
306 JS_INTL_COLLATOR_TYPE,
307 JS_INTL_DATE_TIME_FORMAT_TYPE,
308 JS_INTL_LIST_FORMAT_TYPE,
310 JS_INTL_NUMBER_FORMAT_TYPE,
311 JS_INTL_PLURAL_RULES_TYPE,
312 JS_INTL_RELATIVE_TIME_FORMAT_TYPE,
313 JS_INTL_SEGMENT_ITERATOR_TYPE,
314 JS_INTL_SEGMENTER_TYPE,
323 JS_BOUND_FUNCTION_TYPE,
328 LAST_TYPE = JS_FUNCTION_TYPE,
329 FIRST_STRING_TYPE = FIRST_TYPE,
330 FIRST_NAME_TYPE = FIRST_STRING_TYPE,
331 LAST_NAME_TYPE = SYMBOL_TYPE,
332 FIRST_UNIQUE_NAME_TYPE = INTERNALIZED_STRING_TYPE,
333 LAST_UNIQUE_NAME_TYPE = SYMBOL_TYPE,
334 FIRST_NONSTRING_TYPE = SYMBOL_TYPE,
335 FIRST_PRIMITIVE_TYPE = FIRST_NAME_TYPE,
336 LAST_PRIMITIVE_TYPE = ODDBALL_TYPE,
337 FIRST_FUNCTION_TYPE = JS_BOUND_FUNCTION_TYPE,
338 LAST_FUNCTION_TYPE = JS_FUNCTION_TYPE,
340 FIRST_FIXED_ARRAY_TYPE = FIXED_ARRAY_TYPE,
341 LAST_FIXED_ARRAY_TYPE = SCRIPT_CONTEXT_TABLE_TYPE,
343 FIRST_HASH_TABLE_TYPE = HASH_TABLE_TYPE,
344 LAST_HASH_TABLE_TYPE = EPHEMERON_HASH_TABLE_TYPE,
346 FIRST_DICTIONARY_TYPE = ORDERED_HASH_MAP_TYPE,
347 LAST_DICTIONARY_TYPE = SIMPLE_NUMBER_DICTIONARY_TYPE,
349 FIRST_WEAK_FIXED_ARRAY_TYPE = WEAK_FIXED_ARRAY_TYPE,
350 LAST_WEAK_FIXED_ARRAY_TYPE = TRANSITION_ARRAY_TYPE,
352 FIRST_CONTEXT_TYPE = AWAIT_CONTEXT_TYPE,
353 LAST_CONTEXT_TYPE = WITH_CONTEXT_TYPE,
355 FIRST_MICROTASK_TYPE = CALLABLE_TASK_TYPE,
356 LAST_MICROTASK_TYPE = WEAK_FACTORY_CLEANUP_JOB_TASK_TYPE,
358 FIRST_FIXED_TYPED_ARRAY_TYPE = FIXED_INT8_ARRAY_TYPE,
359 LAST_FIXED_TYPED_ARRAY_TYPE = FIXED_BIGUINT64_ARRAY_TYPE,
361 LAST_DATA_TYPE = FILLER_TYPE,
367 FIRST_JS_RECEIVER_TYPE = JS_PROXY_TYPE,
368 LAST_JS_RECEIVER_TYPE = LAST_TYPE,
370 FIRST_JS_OBJECT_TYPE = JS_GLOBAL_OBJECT_TYPE,
371 LAST_JS_OBJECT_TYPE = LAST_TYPE,
373 LAST_SPECIAL_RECEIVER_TYPE = JS_SPECIAL_API_OBJECT_TYPE,
377 LAST_CUSTOM_ELEMENTS_RECEIVER = JS_VALUE_TYPE,
379 FIRST_SET_ITERATOR_TYPE = JS_SET_KEY_VALUE_ITERATOR_TYPE,
380 LAST_SET_ITERATOR_TYPE = JS_SET_VALUE_ITERATOR_TYPE,
382 FIRST_MAP_ITERATOR_TYPE = JS_MAP_KEY_ITERATOR_TYPE,
383 LAST_MAP_ITERATOR_TYPE = JS_MAP_VALUE_ITERATOR_TYPE,
385 FIRST_JS_WEAK_CELL_TYPE = JS_WEAK_CELL_TYPE,
386 LAST_JS_WEAK_CELL_TYPE = JS_WEAK_REF_TYPE,
392 constexpr InstanceType LAST_STRING_TYPE =
393 static_cast<InstanceType
>(FIRST_NONSTRING_TYPE - 1);
395 STATIC_ASSERT((FIRST_NONSTRING_TYPE & kIsNotStringMask) != kStringTag);
396 STATIC_ASSERT(JS_OBJECT_TYPE == Internals::kJSObjectType);
397 STATIC_ASSERT(JS_API_OBJECT_TYPE == Internals::kJSApiObjectType);
398 STATIC_ASSERT(JS_SPECIAL_API_OBJECT_TYPE == Internals::kJSSpecialApiObjectType);
399 STATIC_ASSERT(FIRST_NONSTRING_TYPE == Internals::kFirstNonstringType);
400 STATIC_ASSERT(ODDBALL_TYPE == Internals::kOddballType);
401 STATIC_ASSERT(FOREIGN_TYPE == Internals::kForeignType);
403 V8_EXPORT_PRIVATE std::ostream& operator<<(std::ostream& os,
404 InstanceType instance_type);
407 #define INSTANCE_TYPE_CHECKERS_SINGLE_BASE(V) \ 408 V(AllocationSite, ALLOCATION_SITE_TYPE) \ 409 V(BigInt, BIGINT_TYPE) \ 410 V(ObjectBoilerplateDescription, OBJECT_BOILERPLATE_DESCRIPTION_TYPE) \ 411 V(BreakPoint, TUPLE2_TYPE) \ 412 V(BreakPointInfo, TUPLE2_TYPE) \ 413 V(ByteArray, BYTE_ARRAY_TYPE) \ 414 V(BytecodeArray, BYTECODE_ARRAY_TYPE) \ 415 V(CallHandlerInfo, CALL_HANDLER_INFO_TYPE) \ 418 V(CodeDataContainer, CODE_DATA_CONTAINER_TYPE) \ 419 V(CoverageInfo, FIXED_ARRAY_TYPE) \ 420 V(DescriptorArray, DESCRIPTOR_ARRAY_TYPE) \ 421 V(EmbedderDataArray, EMBEDDER_DATA_ARRAY_TYPE) \ 422 V(EphemeronHashTable, EPHEMERON_HASH_TABLE_TYPE) \ 423 V(FeedbackCell, FEEDBACK_CELL_TYPE) \ 424 V(FeedbackMetadata, FEEDBACK_METADATA_TYPE) \ 425 V(FeedbackVector, FEEDBACK_VECTOR_TYPE) \ 426 V(FixedArrayExact, FIXED_ARRAY_TYPE) \ 427 V(FixedDoubleArray, FIXED_DOUBLE_ARRAY_TYPE) \ 428 V(Foreign, FOREIGN_TYPE) \ 429 V(FreeSpace, FREE_SPACE_TYPE) \ 430 V(GlobalDictionary, GLOBAL_DICTIONARY_TYPE) \ 431 V(HeapNumber, HEAP_NUMBER_TYPE) \ 432 V(JSArgumentsObject, JS_ARGUMENTS_TYPE) \ 433 V(JSArgumentsObjectWithLength, JS_ARGUMENTS_TYPE) \ 434 V(JSArray, JS_ARRAY_TYPE) \ 435 V(JSArrayBuffer, JS_ARRAY_BUFFER_TYPE) \ 436 V(JSArrayIterator, JS_ARRAY_ITERATOR_TYPE) \ 437 V(JSAsyncFromSyncIterator, JS_ASYNC_FROM_SYNC_ITERATOR_TYPE) \ 438 V(JSAsyncFunctionObject, JS_ASYNC_FUNCTION_OBJECT_TYPE) \ 439 V(JSAsyncGeneratorObject, JS_ASYNC_GENERATOR_OBJECT_TYPE) \ 440 V(JSBoundFunction, JS_BOUND_FUNCTION_TYPE) \ 441 V(JSContextExtensionObject, JS_CONTEXT_EXTENSION_OBJECT_TYPE) \ 442 V(JSDataView, JS_DATA_VIEW_TYPE) \ 443 V(JSDate, JS_DATE_TYPE) \ 444 V(JSError, JS_ERROR_TYPE) \ 445 V(JSFunction, JS_FUNCTION_TYPE) \ 446 V(JSGlobalObject, JS_GLOBAL_OBJECT_TYPE) \ 447 V(JSGlobalProxy, JS_GLOBAL_PROXY_TYPE) \ 448 V(JSMap, JS_MAP_TYPE) \ 449 V(JSMessageObject, JS_MESSAGE_OBJECT_TYPE) \ 450 V(JSModuleNamespace, JS_MODULE_NAMESPACE_TYPE) \ 451 V(JSPromise, JS_PROMISE_TYPE) \ 452 V(JSProxy, JS_PROXY_TYPE) \ 453 V(JSRegExp, JS_REGEXP_TYPE) \ 454 V(JSRegExpResult, JS_ARRAY_TYPE) \ 455 V(JSRegExpStringIterator, JS_REGEXP_STRING_ITERATOR_TYPE) \ 456 V(JSSet, JS_SET_TYPE) \ 457 V(JSStringIterator, JS_STRING_ITERATOR_TYPE) \ 458 V(JSTypedArray, JS_TYPED_ARRAY_TYPE) \ 459 V(JSValue, JS_VALUE_TYPE) \ 460 V(JSWeakFactory, JS_WEAK_FACTORY_TYPE) \ 461 V(JSWeakFactoryCleanupIterator, JS_WEAK_FACTORY_CLEANUP_ITERATOR_TYPE) \ 462 V(JSWeakMap, JS_WEAK_MAP_TYPE) \ 463 V(JSWeakRef, JS_WEAK_REF_TYPE) \ 464 V(JSWeakSet, JS_WEAK_SET_TYPE) \ 465 V(LoadHandler, LOAD_HANDLER_TYPE) \ 467 V(MutableHeapNumber, MUTABLE_HEAP_NUMBER_TYPE) \ 468 V(NameDictionary, NAME_DICTIONARY_TYPE) \ 469 V(NativeContext, NATIVE_CONTEXT_TYPE) \ 470 V(NumberDictionary, NUMBER_DICTIONARY_TYPE) \ 471 V(Oddball, ODDBALL_TYPE) \ 472 V(OrderedHashMap, ORDERED_HASH_MAP_TYPE) \ 473 V(OrderedHashSet, ORDERED_HASH_SET_TYPE) \ 474 V(OrderedNameDictionary, ORDERED_NAME_DICTIONARY_TYPE) \ 475 V(PreParsedScopeData, PRE_PARSED_SCOPE_DATA_TYPE) \ 476 V(PropertyArray, PROPERTY_ARRAY_TYPE) \ 477 V(PropertyCell, PROPERTY_CELL_TYPE) \ 478 V(PropertyDescriptorObject, FIXED_ARRAY_TYPE) \ 479 V(ScopeInfo, SCOPE_INFO_TYPE) \ 480 V(ScriptContextTable, SCRIPT_CONTEXT_TABLE_TYPE) \ 481 V(SharedFunctionInfo, SHARED_FUNCTION_INFO_TYPE) \ 482 V(SimpleNumberDictionary, SIMPLE_NUMBER_DICTIONARY_TYPE) \ 483 V(SmallOrderedHashMap, SMALL_ORDERED_HASH_MAP_TYPE) \ 484 V(SmallOrderedHashSet, SMALL_ORDERED_HASH_SET_TYPE) \ 485 V(SmallOrderedNameDictionary, SMALL_ORDERED_NAME_DICTIONARY_TYPE) \ 486 V(SourcePositionTableWithFrameCache, TUPLE2_TYPE) \ 487 V(StoreHandler, STORE_HANDLER_TYPE) \ 488 V(StringTable, STRING_TABLE_TYPE) \ 489 V(Symbol, SYMBOL_TYPE) \ 490 V(TemplateObjectDescription, TUPLE2_TYPE) \ 491 V(TransitionArray, TRANSITION_ARRAY_TYPE) \ 492 V(UncompiledDataWithoutPreParsedScope, \ 493 UNCOMPILED_DATA_WITHOUT_PRE_PARSED_SCOPE_TYPE) \ 494 V(UncompiledDataWithPreParsedScope, \ 495 UNCOMPILED_DATA_WITH_PRE_PARSED_SCOPE_TYPE) \ 496 V(WasmExceptionObject, WASM_EXCEPTION_TYPE) \ 497 V(WasmGlobalObject, WASM_GLOBAL_TYPE) \ 498 V(WasmInstanceObject, WASM_INSTANCE_TYPE) \ 499 V(WasmMemoryObject, WASM_MEMORY_TYPE) \ 500 V(WasmModuleObject, WASM_MODULE_TYPE) \ 501 V(WasmTableObject, WASM_TABLE_TYPE) \ 502 V(WeakArrayList, WEAK_ARRAY_LIST_TYPE) 503 #ifdef V8_INTL_SUPPORT 505 #define INSTANCE_TYPE_CHECKERS_SINGLE(V) \ 506 INSTANCE_TYPE_CHECKERS_SINGLE_BASE(V) \ 507 V(JSV8BreakIterator, JS_INTL_V8_BREAK_ITERATOR_TYPE) \ 508 V(JSCollator, JS_INTL_COLLATOR_TYPE) \ 509 V(JSDateTimeFormat, JS_INTL_DATE_TIME_FORMAT_TYPE) \ 510 V(JSListFormat, JS_INTL_LIST_FORMAT_TYPE) \ 511 V(JSLocale, JS_INTL_LOCALE_TYPE) \ 512 V(JSNumberFormat, JS_INTL_NUMBER_FORMAT_TYPE) \ 513 V(JSPluralRules, JS_INTL_PLURAL_RULES_TYPE) \ 514 V(JSRelativeTimeFormat, JS_INTL_RELATIVE_TIME_FORMAT_TYPE) \ 515 V(JSSegmentIterator, JS_INTL_SEGMENT_ITERATOR_TYPE) \ 516 V(JSSegmenter, JS_INTL_SEGMENTER_TYPE) 520 #define INSTANCE_TYPE_CHECKERS_SINGLE(V) INSTANCE_TYPE_CHECKERS_SINGLE_BASE(V) 522 #endif // V8_INTL_SUPPORT 524 #define INSTANCE_TYPE_CHECKERS_RANGE(V) \ 525 V(Context, FIRST_CONTEXT_TYPE, LAST_CONTEXT_TYPE) \ 526 V(Dictionary, FIRST_DICTIONARY_TYPE, LAST_DICTIONARY_TYPE) \ 527 V(FixedArray, FIRST_FIXED_ARRAY_TYPE, LAST_FIXED_ARRAY_TYPE) \ 528 V(FixedTypedArrayBase, FIRST_FIXED_TYPED_ARRAY_TYPE, \ 529 LAST_FIXED_TYPED_ARRAY_TYPE) \ 530 V(HashTable, FIRST_HASH_TABLE_TYPE, LAST_HASH_TABLE_TYPE) \ 531 V(JSMapIterator, FIRST_MAP_ITERATOR_TYPE, LAST_MAP_ITERATOR_TYPE) \ 532 V(JSSetIterator, FIRST_SET_ITERATOR_TYPE, LAST_SET_ITERATOR_TYPE) \ 533 V(JSWeakCell, FIRST_JS_WEAK_CELL_TYPE, LAST_JS_WEAK_CELL_TYPE) \ 534 V(Microtask, FIRST_MICROTASK_TYPE, LAST_MICROTASK_TYPE) \ 535 V(Name, FIRST_NAME_TYPE, LAST_NAME_TYPE) \ 536 V(String, FIRST_STRING_TYPE, LAST_STRING_TYPE) \ 537 V(WeakFixedArray, FIRST_WEAK_FIXED_ARRAY_TYPE, LAST_WEAK_FIXED_ARRAY_TYPE) 539 #define INSTANCE_TYPE_CHECKERS_CUSTOM(V) \ 541 V(InternalizedString) \ 545 #define INSTANCE_TYPE_CHECKERS(V) \ 546 INSTANCE_TYPE_CHECKERS_SINGLE(V) \ 547 INSTANCE_TYPE_CHECKERS_RANGE(V) \ 548 INSTANCE_TYPE_CHECKERS_CUSTOM(V) 550 namespace InstanceTypeChecker {
551 #define IS_TYPE_FUNCTION_DECL(Type, ...) \ 552 V8_INLINE bool Is##Type(InstanceType instance_type); 554 INSTANCE_TYPE_CHECKERS(IS_TYPE_FUNCTION_DECL)
556 #define TYPED_ARRAY_IS_TYPE_FUNCTION_DECL(Type, ...) \ 557 IS_TYPE_FUNCTION_DECL(Fixed##Type##Array) 558 TYPED_ARRAYS(TYPED_ARRAY_IS_TYPE_FUNCTION_DECL)
559 #undef TYPED_ARRAY_IS_TYPE_FUNCTION_DECL 561 #define STRUCT_IS_TYPE_FUNCTION_DECL(NAME, Name, name) \ 562 IS_TYPE_FUNCTION_DECL(Name) 563 STRUCT_LIST(STRUCT_IS_TYPE_FUNCTION_DECL)
564 #undef STRUCT_IS_TYPE_FUNCTION_DECL 566 #undef IS_TYPE_FUNCTION_DECL 572 #include "src/objects/object-macros-undef.h" 574 #endif // V8_OBJECTS_INSTANCE_TYPE_H_