|  | // Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file | 
|  | // for details. All rights reserved. Use of this source code is governed by a | 
|  | // BSD-style license that can be found in the LICENSE file. | 
|  |  | 
|  | #ifndef RUNTIME_VM_COMPILER_RUNTIME_OFFSETS_LIST_H_ | 
|  | #define RUNTIME_VM_COMPILER_RUNTIME_OFFSETS_LIST_H_ | 
|  |  | 
|  | // Macro list of all constants that differ based on whether the architecture is | 
|  | // 32-bit or 64-bit. They are used to allow the target architecture to differ | 
|  | // from the host, like this: | 
|  | // 1) The macros correspond to constants defined throughout the VM that are | 
|  | //    sized based on the *host* architecture. | 
|  | // 2) offsets_extractor.cc prints these values to runtime_offsets_extracted.h, | 
|  | //    for both 32 and 64 bit architectures. | 
|  | // 3) runtime_api.h presents the runtime_offsets_extracted.h constants in a way | 
|  | //    designed to look like the original constants from 1), but now namespaced | 
|  | //    to dart::compiler::target, and sized based on the *target* architecture. | 
|  | // 4) Users of the constants from 1) can now just add the namespace from 3) to | 
|  | //    get all their constants sized based on the target rather than the host. | 
|  |  | 
|  | // FIELD(Class, Name) Offset of a field within a class. | 
|  | // ARRAY(Class, Name) Offset of the first element and the size of the elements | 
|  | //     in an array of this class. | 
|  | // SIZEOF(Class, Name, What) Class::Name() is defined as sizeof(What). | 
|  | // ARRAY_SIZEOF(Class, Name, ElementOffset) Instance size for an array object. | 
|  | //     Defines Class::Name(intptr_t length) and uses | 
|  | //     Class::ElementOffset(length) to calculate size of the instance. Also | 
|  | //     defines Class::Name() (with no length argument) to be 0. | 
|  | // PAYLOAD_SIZEOF(Class, Name, HeaderSize) Instance size for a payload object. | 
|  | //     Defines Class::Name(word payload_size) and uses Class::HeaderSize(), | 
|  | //     which should give the size of the header before the payload. Also | 
|  | //     defines Class::Name() (with no payload size argument) to be 0. | 
|  | // RANGE(Class, Name, Type, First, Last, Filter) An array of offsets generated | 
|  | //     by passing a value of the given Type in the range from First to Last to | 
|  | //     Class::Name() if Filter returns true for that value. | 
|  | // CONSTANT(Class, Name) Miscellaneous constant. | 
|  | // | 
|  | // COMMON_OFFSETS_LIST is for declarations that are valid in all contexts. | 
|  | // JIT_OFFSETS_LIST is for declarations that are only valid in JIT mode. | 
|  | // AOT_OFFSETS_LIST is for declarations that are only valid in AOT mode. | 
|  | // A declaration that is not valid in product mode can be wrapped with | 
|  | // NOT_IN_PRODUCT(). | 
|  | // | 
|  | // TODO(dartbug.com/43646): Add DART_PRECOMPILER as another axis. | 
|  |  | 
|  | #define COMMON_OFFSETS_LIST(FIELD, ARRAY, SIZEOF, ARRAY_SIZEOF,                \ | 
|  | PAYLOAD_SIZEOF, RANGE, CONSTANT)                   \ | 
|  | ARRAY(Array, element_offset)                                                 \ | 
|  | NOT_IN_PRODUCT(ARRAY(ClassTable, ClassOffsetFor))                            \ | 
|  | ARRAY(Code, element_offset)                                                  \ | 
|  | ARRAY(Context, variable_offset)                                              \ | 
|  | ARRAY(ContextScope, element_offset)                                          \ | 
|  | ARRAY(ExceptionHandlers, element_offset)                                     \ | 
|  | ARRAY(InstructionsTable, element_offset)                                     \ | 
|  | ARRAY(ObjectPool, element_offset)                                            \ | 
|  | ARRAY(OneByteString, element_offset)                                         \ | 
|  | ARRAY(TypeArguments, type_at_offset)                                         \ | 
|  | ARRAY(TwoByteString, element_offset)                                         \ | 
|  | ARRAY_SIZEOF(Array, InstanceSize, element_offset)                            \ | 
|  | ARRAY_SIZEOF(Code, InstanceSize, element_offset)                             \ | 
|  | ARRAY_SIZEOF(Context, InstanceSize, variable_offset)                         \ | 
|  | ARRAY_SIZEOF(ContextScope, InstanceSize, element_offset)                     \ | 
|  | ARRAY_SIZEOF(ExceptionHandlers, InstanceSize, element_offset)                \ | 
|  | ARRAY_SIZEOF(InstructionsTable, InstanceSize, element_offset)                \ | 
|  | ARRAY_SIZEOF(ObjectPool, InstanceSize, element_offset)                       \ | 
|  | ARRAY_SIZEOF(OneByteString, InstanceSize, element_offset)                    \ | 
|  | ARRAY_SIZEOF(TypeArguments, InstanceSize, type_at_offset)                    \ | 
|  | ARRAY_SIZEOF(TwoByteString, InstanceSize, element_offset)                    \ | 
|  | CONSTANT(Array, kMaxElements)                                                \ | 
|  | CONSTANT(Array, kMaxNewSpaceElements)                                        \ | 
|  | CONSTANT(Context, kMaxElements)                                              \ | 
|  | CONSTANT(Instructions, kMonomorphicEntryOffsetJIT)                           \ | 
|  | CONSTANT(Instructions, kPolymorphicEntryOffsetJIT)                           \ | 
|  | CONSTANT(Instructions, kMonomorphicEntryOffsetAOT)                           \ | 
|  | CONSTANT(Instructions, kPolymorphicEntryOffsetAOT)                           \ | 
|  | CONSTANT(Instructions, kBarePayloadAlignment)                                \ | 
|  | CONSTANT(Instructions, kNonBarePayloadAlignment)                             \ | 
|  | CONSTANT(OldPage, kBytesPerCardLog2)                                         \ | 
|  | CONSTANT(NativeEntry, kNumCallWrapperArguments)                              \ | 
|  | CONSTANT(String, kMaxElements)                                               \ | 
|  | CONSTANT(SubtypeTestCache, kFunctionTypeArguments)                           \ | 
|  | CONSTANT(SubtypeTestCache, kInstanceCidOrSignature)                          \ | 
|  | CONSTANT(SubtypeTestCache, kDestinationType)                                 \ | 
|  | CONSTANT(SubtypeTestCache, kInstanceDelayedFunctionTypeArguments)            \ | 
|  | CONSTANT(SubtypeTestCache, kInstanceParentFunctionTypeArguments)             \ | 
|  | CONSTANT(SubtypeTestCache, kInstanceTypeArguments)                           \ | 
|  | CONSTANT(SubtypeTestCache, kInstantiatorTypeArguments)                       \ | 
|  | CONSTANT(SubtypeTestCache, kTestEntryLength)                                 \ | 
|  | CONSTANT(SubtypeTestCache, kTestResult)                                      \ | 
|  | CONSTANT(TypeArguments, kMaxElements)                                        \ | 
|  | FIELD(AbstractType, type_test_stub_entry_point_offset)                       \ | 
|  | FIELD(ArgumentsDescriptor, count_offset)                                     \ | 
|  | FIELD(ArgumentsDescriptor, size_offset)                                      \ | 
|  | FIELD(ArgumentsDescriptor, first_named_entry_offset)                         \ | 
|  | FIELD(ArgumentsDescriptor, named_entry_size)                                 \ | 
|  | FIELD(ArgumentsDescriptor, name_offset)                                      \ | 
|  | FIELD(ArgumentsDescriptor, position_offset)                                  \ | 
|  | FIELD(ArgumentsDescriptor, positional_count_offset)                          \ | 
|  | FIELD(ArgumentsDescriptor, type_args_len_offset)                             \ | 
|  | FIELD(Array, data_offset)                                                    \ | 
|  | FIELD(Array, length_offset)                                                  \ | 
|  | FIELD(Array, tags_offset)                                                    \ | 
|  | FIELD(Array, type_arguments_offset)                                          \ | 
|  | FIELD(Class, declaration_type_offset)                                        \ | 
|  | FIELD(Class, num_type_arguments_offset)                                      \ | 
|  | FIELD(Class, super_type_offset)                                              \ | 
|  | FIELD(Class, host_type_arguments_field_offset_in_words_offset)               \ | 
|  | NOT_IN_PRODUCT(FIELD(SharedClassTable, class_heap_stats_table_offset))       \ | 
|  | FIELD(Closure, context_offset)                                               \ | 
|  | FIELD(Closure, delayed_type_arguments_offset)                                \ | 
|  | FIELD(Closure, function_offset)                                              \ | 
|  | FIELD(Closure, function_type_arguments_offset)                               \ | 
|  | FIELD(Closure, hash_offset)                                                  \ | 
|  | FIELD(Closure, instantiator_type_arguments_offset)                           \ | 
|  | FIELD(ClosureData, default_type_arguments_kind_offset)                       \ | 
|  | FIELD(Code, object_pool_offset)                                              \ | 
|  | FIELD(Code, saved_instructions_offset)                                       \ | 
|  | FIELD(Code, owner_offset)                                                    \ | 
|  | FIELD(Context, num_variables_offset)                                         \ | 
|  | FIELD(Context, parent_offset)                                                \ | 
|  | FIELD(Double, value_offset)                                                  \ | 
|  | FIELD(ExternalOneByteString, external_data_offset)                           \ | 
|  | FIELD(ExternalTwoByteString, external_data_offset)                           \ | 
|  | FIELD(Float32x4, value_offset)                                               \ | 
|  | FIELD(Float64x2, value_offset)                                               \ | 
|  | FIELD(Field, initializer_function_offset)                                    \ | 
|  | FIELD(Field, host_offset_or_field_id_offset)                                 \ | 
|  | FIELD(Field, guarded_cid_offset)                                             \ | 
|  | FIELD(Field, guarded_list_length_in_object_offset_offset)                    \ | 
|  | FIELD(Field, guarded_list_length_offset)                                     \ | 
|  | FIELD(Field, is_nullable_offset)                                             \ | 
|  | FIELD(Field, kind_bits_offset)                                               \ | 
|  | FIELD(Function, code_offset)                                                 \ | 
|  | FIELD(Function, data_offset)                                                 \ | 
|  | RANGE(Function, entry_point_offset, CodeEntryKind, CodeEntryKind::kNormal,   \ | 
|  | CodeEntryKind::kUnchecked, [](CodeEntryKind value) { return true; })   \ | 
|  | FIELD(Function, kind_tag_offset)                                             \ | 
|  | FIELD(Function, packed_fields_offset)                                        \ | 
|  | FIELD(Function, signature_offset)                                            \ | 
|  | FIELD(FutureOr, type_arguments_offset)                                       \ | 
|  | FIELD(GrowableObjectArray, data_offset)                                      \ | 
|  | FIELD(GrowableObjectArray, length_offset)                                    \ | 
|  | FIELD(GrowableObjectArray, type_arguments_offset)                            \ | 
|  | FIELD(OldPage, card_table_offset)                                            \ | 
|  | FIELD(CallSiteData, arguments_descriptor_offset)                             \ | 
|  | FIELD(ICData, NumArgsTestedMask)                                             \ | 
|  | FIELD(ICData, NumArgsTestedShift)                                            \ | 
|  | FIELD(ICData, entries_offset)                                                \ | 
|  | FIELD(ICData, owner_offset)                                                  \ | 
|  | FIELD(ICData, state_bits_offset)                                             \ | 
|  | FIELD(Int32x4, value_offset)                                                 \ | 
|  | FIELD(Isolate, current_tag_offset)                                           \ | 
|  | FIELD(Isolate, default_tag_offset)                                           \ | 
|  | FIELD(Isolate, ic_miss_code_offset)                                          \ | 
|  | FIELD(IsolateGroup, object_store_offset)                                     \ | 
|  | FIELD(IsolateGroup, shared_class_table_offset)                               \ | 
|  | FIELD(IsolateGroup, cached_class_table_table_offset)                         \ | 
|  | NOT_IN_PRODUCT(FIELD(Isolate, single_step_offset))                           \ | 
|  | FIELD(Isolate, user_tag_offset)                                              \ | 
|  | FIELD(LinkedHashBase, data_offset)                                           \ | 
|  | FIELD(ImmutableLinkedHashBase, data_offset)                                  \ | 
|  | FIELD(LinkedHashBase, deleted_keys_offset)                                   \ | 
|  | FIELD(LinkedHashBase, hash_mask_offset)                                      \ | 
|  | FIELD(LinkedHashBase, index_offset)                                          \ | 
|  | FIELD(LinkedHashBase, type_arguments_offset)                                 \ | 
|  | FIELD(LinkedHashBase, used_data_offset)                                      \ | 
|  | FIELD(LocalHandle, ptr_offset)                                               \ | 
|  | FIELD(MarkingStackBlock, pointers_offset)                                    \ | 
|  | FIELD(MarkingStackBlock, top_offset)                                         \ | 
|  | FIELD(MegamorphicCache, buckets_offset)                                      \ | 
|  | FIELD(MegamorphicCache, mask_offset)                                         \ | 
|  | FIELD(Mint, value_offset)                                                    \ | 
|  | FIELD(NativeArguments, argc_tag_offset)                                      \ | 
|  | FIELD(NativeArguments, argv_offset)                                          \ | 
|  | FIELD(NativeArguments, retval_offset)                                        \ | 
|  | FIELD(NativeArguments, thread_offset)                                        \ | 
|  | FIELD(ObjectStore, double_type_offset)                                       \ | 
|  | FIELD(ObjectStore, int_type_offset)                                          \ | 
|  | FIELD(ObjectStore, string_type_offset)                                       \ | 
|  | FIELD(ObjectStore, type_type_offset)                                         \ | 
|  | FIELD(OneByteString, data_offset)                                            \ | 
|  | FIELD(PointerBase, data_field_offset)                                        \ | 
|  | FIELD(Pointer, type_arguments_offset)                                        \ | 
|  | FIELD(SingleTargetCache, entry_point_offset)                                 \ | 
|  | FIELD(SingleTargetCache, lower_limit_offset)                                 \ | 
|  | FIELD(SingleTargetCache, target_offset)                                      \ | 
|  | FIELD(SingleTargetCache, upper_limit_offset)                                 \ | 
|  | FIELD(StoreBufferBlock, pointers_offset)                                     \ | 
|  | FIELD(StoreBufferBlock, top_offset)                                          \ | 
|  | FIELD(String, hash_offset)                                                   \ | 
|  | FIELD(String, length_offset)                                                 \ | 
|  | FIELD(SubtypeTestCache, cache_offset)                                        \ | 
|  | FIELD(Thread, AllocateArray_entry_point_offset)                              \ | 
|  | FIELD(Thread, active_exception_offset)                                       \ | 
|  | FIELD(Thread, active_stacktrace_offset)                                      \ | 
|  | FIELD(Thread, array_write_barrier_code_offset)                               \ | 
|  | FIELD(Thread, array_write_barrier_entry_point_offset)                        \ | 
|  | FIELD(Thread, allocate_mint_with_fpu_regs_entry_point_offset)                \ | 
|  | FIELD(Thread, allocate_mint_with_fpu_regs_stub_offset)                       \ | 
|  | FIELD(Thread, allocate_mint_without_fpu_regs_entry_point_offset)             \ | 
|  | FIELD(Thread, allocate_mint_without_fpu_regs_stub_offset)                    \ | 
|  | FIELD(Thread, allocate_object_entry_point_offset)                            \ | 
|  | FIELD(Thread, allocate_object_stub_offset)                                   \ | 
|  | FIELD(Thread, allocate_object_parameterized_entry_point_offset)              \ | 
|  | FIELD(Thread, allocate_object_parameterized_stub_offset)                     \ | 
|  | FIELD(Thread, allocate_object_slow_entry_point_offset)                       \ | 
|  | FIELD(Thread, allocate_object_slow_stub_offset)                              \ | 
|  | FIELD(Thread, api_top_scope_offset)                                          \ | 
|  | FIELD(Thread, auto_scope_native_wrapper_entry_point_offset)                  \ | 
|  | FIELD(Thread, bool_false_offset)                                             \ | 
|  | FIELD(Thread, bool_true_offset)                                              \ | 
|  | FIELD(Thread, bootstrap_native_wrapper_entry_point_offset)                   \ | 
|  | FIELD(Thread, call_to_runtime_entry_point_offset)                            \ | 
|  | FIELD(Thread, call_to_runtime_stub_offset)                                   \ | 
|  | FIELD(Thread, dart_stream_offset)                                            \ | 
|  | FIELD(Thread, dispatch_table_array_offset)                                   \ | 
|  | FIELD(Thread, double_truncate_round_supported_offset)                        \ | 
|  | FIELD(Thread, optimize_entry_offset)                                         \ | 
|  | FIELD(Thread, optimize_stub_offset)                                          \ | 
|  | FIELD(Thread, deoptimize_entry_offset)                                       \ | 
|  | FIELD(Thread, deoptimize_stub_offset)                                        \ | 
|  | FIELD(Thread, double_abs_address_offset)                                     \ | 
|  | FIELD(Thread, double_negate_address_offset)                                  \ | 
|  | FIELD(Thread, end_offset)                                                    \ | 
|  | FIELD(Thread, enter_safepoint_stub_offset)                                   \ | 
|  | FIELD(Thread, execution_state_offset)                                        \ | 
|  | FIELD(Thread, exit_safepoint_stub_offset)                                    \ | 
|  | FIELD(Thread, call_native_through_safepoint_stub_offset)                     \ | 
|  | FIELD(Thread, call_native_through_safepoint_entry_point_offset)              \ | 
|  | FIELD(Thread, fix_allocation_stub_code_offset)                               \ | 
|  | FIELD(Thread, fix_callers_target_code_offset)                                \ | 
|  | FIELD(Thread, float_absolute_address_offset)                                 \ | 
|  | FIELD(Thread, float_negate_address_offset)                                   \ | 
|  | FIELD(Thread, float_not_address_offset)                                      \ | 
|  | FIELD(Thread, float_zerow_address_offset)                                    \ | 
|  | FIELD(Thread, global_object_pool_offset)                                     \ | 
|  | FIELD(Thread, invoke_dart_code_stub_offset)                                  \ | 
|  | FIELD(Thread, exit_through_ffi_offset)                                       \ | 
|  | FIELD(Thread, isolate_offset)                                                \ | 
|  | FIELD(Thread, isolate_group_offset)                                          \ | 
|  | FIELD(Thread, field_table_values_offset)                                     \ | 
|  | FIELD(Thread, lazy_deopt_from_return_stub_offset)                            \ | 
|  | FIELD(Thread, lazy_deopt_from_throw_stub_offset)                             \ | 
|  | FIELD(Thread, lazy_specialize_type_test_stub_offset)                         \ | 
|  | FIELD(Thread, marking_stack_block_offset)                                    \ | 
|  | FIELD(Thread, megamorphic_call_checked_entry_offset)                         \ | 
|  | FIELD(Thread, switchable_call_miss_entry_offset)                             \ | 
|  | FIELD(Thread, switchable_call_miss_stub_offset)                              \ | 
|  | FIELD(Thread, no_scope_native_wrapper_entry_point_offset)                    \ | 
|  | FIELD(Thread, late_initialization_error_shared_with_fpu_regs_stub_offset)    \ | 
|  | FIELD(Thread, late_initialization_error_shared_without_fpu_regs_stub_offset) \ | 
|  | FIELD(Thread, null_error_shared_with_fpu_regs_stub_offset)                   \ | 
|  | FIELD(Thread, null_error_shared_without_fpu_regs_stub_offset)                \ | 
|  | FIELD(Thread, null_arg_error_shared_with_fpu_regs_stub_offset)               \ | 
|  | FIELD(Thread, null_arg_error_shared_without_fpu_regs_stub_offset)            \ | 
|  | FIELD(Thread, null_cast_error_shared_with_fpu_regs_stub_offset)              \ | 
|  | FIELD(Thread, null_cast_error_shared_without_fpu_regs_stub_offset)           \ | 
|  | FIELD(Thread, range_error_shared_with_fpu_regs_stub_offset)                  \ | 
|  | FIELD(Thread, range_error_shared_without_fpu_regs_stub_offset)               \ | 
|  | \ | 
|  | FIELD(Thread, object_null_offset)                                            \ | 
|  | FIELD(Thread, predefined_symbols_address_offset)                             \ | 
|  | FIELD(Thread, resume_pc_offset)                                              \ | 
|  | FIELD(Thread, saved_shadow_call_stack_offset)                                \ | 
|  | FIELD(Thread, safepoint_state_offset)                                        \ | 
|  | FIELD(Thread, slow_type_test_stub_offset)                                    \ | 
|  | FIELD(Thread, slow_type_test_entry_point_offset)                             \ | 
|  | FIELD(Thread, stack_limit_offset)                                            \ | 
|  | FIELD(Thread, saved_stack_limit_offset)                                      \ | 
|  | FIELD(Thread, stack_overflow_flags_offset)                                   \ | 
|  | FIELD(Thread, stack_overflow_shared_with_fpu_regs_entry_point_offset)        \ | 
|  | FIELD(Thread, stack_overflow_shared_with_fpu_regs_stub_offset)               \ | 
|  | FIELD(Thread, stack_overflow_shared_without_fpu_regs_entry_point_offset)     \ | 
|  | \ | 
|  | FIELD(Thread, stack_overflow_shared_without_fpu_regs_stub_offset)            \ | 
|  | FIELD(Thread, store_buffer_block_offset)                                     \ | 
|  | FIELD(Thread, top_exit_frame_info_offset)                                    \ | 
|  | FIELD(Thread, top_offset)                                                    \ | 
|  | FIELD(Thread, top_resource_offset)                                           \ | 
|  | FIELD(Thread, unboxed_int64_runtime_arg_offset)                              \ | 
|  | FIELD(Thread, unboxed_double_runtime_arg_offset)                             \ | 
|  | FIELD(Thread, vm_tag_offset)                                                 \ | 
|  | FIELD(Thread, write_barrier_code_offset)                                     \ | 
|  | FIELD(Thread, write_barrier_entry_point_offset)                              \ | 
|  | FIELD(Thread, write_barrier_mask_offset)                                     \ | 
|  | FIELD(Thread, heap_base_offset)                                              \ | 
|  | FIELD(Thread, callback_code_offset)                                          \ | 
|  | FIELD(Thread, callback_stack_return_offset)                                  \ | 
|  | FIELD(TimelineStream, enabled_offset)                                        \ | 
|  | FIELD(TwoByteString, data_offset)                                            \ | 
|  | FIELD(Type, arguments_offset)                                                \ | 
|  | FIELD(Type, hash_offset)                                                     \ | 
|  | FIELD(Type, type_class_id_offset)                                            \ | 
|  | FIELD(Type, type_state_offset)                                               \ | 
|  | FIELD(Type, nullability_offset)                                              \ | 
|  | FIELD(FunctionType, hash_offset)                                             \ | 
|  | FIELD(FunctionType, named_parameter_names_offset)                            \ | 
|  | FIELD(FunctionType, nullability_offset)                                      \ | 
|  | FIELD(FunctionType, packed_parameter_counts_offset)                          \ | 
|  | FIELD(FunctionType, packed_type_parameter_counts_offset)                     \ | 
|  | FIELD(FunctionType, parameter_types_offset)                                  \ | 
|  | FIELD(FunctionType, type_parameters_offset)                                  \ | 
|  | FIELD(TypeParameter, parameterized_class_id_offset)                          \ | 
|  | FIELD(TypeParameter, index_offset)                                           \ | 
|  | FIELD(TypeParameter, nullability_offset)                                     \ | 
|  | FIELD(TypeArguments, instantiations_offset)                                  \ | 
|  | FIELD(TypeArguments, length_offset)                                          \ | 
|  | FIELD(TypeArguments, nullability_offset)                                     \ | 
|  | FIELD(TypeArguments, types_offset)                                           \ | 
|  | FIELD(TypeParameters, names_offset)                                          \ | 
|  | FIELD(TypeParameters, flags_offset)                                          \ | 
|  | FIELD(TypeParameters, bounds_offset)                                         \ | 
|  | FIELD(TypeParameters, defaults_offset)                                       \ | 
|  | FIELD(TypeParameter, bound_offset)                                           \ | 
|  | FIELD(TypeParameter, flags_offset)                                           \ | 
|  | FIELD(TypeRef, type_offset)                                                  \ | 
|  | FIELD(TypedDataBase, length_offset)                                          \ | 
|  | FIELD(TypedDataView, data_offset)                                            \ | 
|  | FIELD(TypedDataView, offset_in_bytes_offset)                                 \ | 
|  | FIELD(TypedData, data_offset)                                                \ | 
|  | FIELD(UnhandledException, exception_offset)                                  \ | 
|  | FIELD(UnhandledException, stacktrace_offset)                                 \ | 
|  | FIELD(UserTag, tag_offset)                                                   \ | 
|  | FIELD(MonomorphicSmiableCall, expected_cid_offset)                           \ | 
|  | FIELD(MonomorphicSmiableCall, entrypoint_offset)                             \ | 
|  | FIELD(MonomorphicSmiableCall, target_offset)                                 \ | 
|  | FIELD(WeakProperty, key_offset)                                              \ | 
|  | FIELD(WeakProperty, value_offset)                                            \ | 
|  | RANGE(Code, entry_point_offset, CodeEntryKind, CodeEntryKind::kNormal,       \ | 
|  | CodeEntryKind::kMonomorphicUnchecked,                                  \ | 
|  | [](CodeEntryKind value) { return true; })                              \ | 
|  | ONLY_IN_ARM_ARM64_X64(RANGE(                                                 \ | 
|  | Thread, write_barrier_wrappers_thread_offset, Register, 0,               \ | 
|  | kNumberOfCpuRegisters - 1,                                               \ | 
|  | [](Register reg) { return (kDartAvailableCpuRegs & (1 << reg)) != 0; })) \ | 
|  | \ | 
|  | SIZEOF(AbstractType, InstanceSize, UntaggedAbstractType)                     \ | 
|  | SIZEOF(ApiError, InstanceSize, UntaggedApiError)                             \ | 
|  | SIZEOF(Array, header_size, UntaggedArray)                                    \ | 
|  | SIZEOF(Bool, InstanceSize, UntaggedBool)                                     \ | 
|  | SIZEOF(Capability, InstanceSize, UntaggedCapability)                         \ | 
|  | SIZEOF(Class, InstanceSize, UntaggedClass)                                   \ | 
|  | SIZEOF(Closure, InstanceSize, UntaggedClosure)                               \ | 
|  | SIZEOF(ClosureData, InstanceSize, UntaggedClosureData)                       \ | 
|  | SIZEOF(CodeSourceMap, HeaderSize, UntaggedCodeSourceMap)                     \ | 
|  | SIZEOF(CompressedStackMaps, HeaderSize, UntaggedCompressedStackMaps)         \ | 
|  | SIZEOF(Context, header_size, UntaggedContext)                                \ | 
|  | SIZEOF(Double, InstanceSize, UntaggedDouble)                                 \ | 
|  | SIZEOF(DynamicLibrary, InstanceSize, UntaggedDynamicLibrary)                 \ | 
|  | SIZEOF(ExternalOneByteString, InstanceSize, UntaggedExternalOneByteString)   \ | 
|  | SIZEOF(ExternalTwoByteString, InstanceSize, UntaggedExternalTwoByteString)   \ | 
|  | SIZEOF(ExternalTypedData, InstanceSize, UntaggedExternalTypedData)           \ | 
|  | SIZEOF(FfiTrampolineData, InstanceSize, UntaggedFfiTrampolineData)           \ | 
|  | SIZEOF(Field, InstanceSize, UntaggedField)                                   \ | 
|  | SIZEOF(Float32x4, InstanceSize, UntaggedFloat32x4)                           \ | 
|  | SIZEOF(Float64x2, InstanceSize, UntaggedFloat64x2)                           \ | 
|  | SIZEOF(Function, InstanceSize, UntaggedFunction)                             \ | 
|  | SIZEOF(FunctionType, InstanceSize, UntaggedFunctionType)                     \ | 
|  | SIZEOF(FutureOr, InstanceSize, UntaggedFutureOr)                             \ | 
|  | SIZEOF(GrowableObjectArray, InstanceSize, UntaggedGrowableObjectArray)       \ | 
|  | SIZEOF(ICData, InstanceSize, UntaggedICData)                                 \ | 
|  | SIZEOF(Instance, InstanceSize, UntaggedInstance)                             \ | 
|  | SIZEOF(Instructions, UnalignedHeaderSize, UntaggedInstructions)              \ | 
|  | SIZEOF(InstructionsSection, UnalignedHeaderSize,                             \ | 
|  | UntaggedInstructionsSection)                                          \ | 
|  | SIZEOF(Int32x4, InstanceSize, UntaggedInt32x4)                               \ | 
|  | SIZEOF(Integer, InstanceSize, UntaggedInteger)                               \ | 
|  | SIZEOF(KernelProgramInfo, InstanceSize, UntaggedKernelProgramInfo)           \ | 
|  | SIZEOF(LanguageError, InstanceSize, UntaggedLanguageError)                   \ | 
|  | SIZEOF(Library, InstanceSize, UntaggedLibrary)                               \ | 
|  | SIZEOF(LibraryPrefix, InstanceSize, UntaggedLibraryPrefix)                   \ | 
|  | SIZEOF(LinkedHashBase, InstanceSize, UntaggedLinkedHashBase)                 \ | 
|  | SIZEOF(MegamorphicCache, InstanceSize, UntaggedMegamorphicCache)             \ | 
|  | SIZEOF(Mint, InstanceSize, UntaggedMint)                                     \ | 
|  | SIZEOF(MirrorReference, InstanceSize, UntaggedMirrorReference)               \ | 
|  | SIZEOF(MonomorphicSmiableCall, InstanceSize, UntaggedMonomorphicSmiableCall) \ | 
|  | SIZEOF(Namespace, InstanceSize, UntaggedNamespace)                           \ | 
|  | SIZEOF(NativeArguments, StructSize, NativeArguments)                         \ | 
|  | SIZEOF(Number, InstanceSize, UntaggedNumber)                                 \ | 
|  | SIZEOF(Object, InstanceSize, UntaggedObject)                                 \ | 
|  | SIZEOF(PatchClass, InstanceSize, UntaggedPatchClass)                         \ | 
|  | SIZEOF(PcDescriptors, HeaderSize, UntaggedPcDescriptors)                     \ | 
|  | SIZEOF(Pointer, InstanceSize, UntaggedPointer)                               \ | 
|  | SIZEOF(ReceivePort, InstanceSize, UntaggedReceivePort)                       \ | 
|  | SIZEOF(RegExp, InstanceSize, UntaggedRegExp)                                 \ | 
|  | SIZEOF(Script, InstanceSize, UntaggedScript)                                 \ | 
|  | SIZEOF(SendPort, InstanceSize, UntaggedSendPort)                             \ | 
|  | SIZEOF(Sentinel, InstanceSize, UntaggedSentinel)                             \ | 
|  | SIZEOF(SingleTargetCache, InstanceSize, UntaggedSingleTargetCache)           \ | 
|  | SIZEOF(StackTrace, InstanceSize, UntaggedStackTrace)                         \ | 
|  | SIZEOF(String, InstanceSize, UntaggedString)                                 \ | 
|  | SIZEOF(SubtypeTestCache, InstanceSize, UntaggedSubtypeTestCache)             \ | 
|  | SIZEOF(LoadingUnit, InstanceSize, UntaggedLoadingUnit)                       \ | 
|  | SIZEOF(TransferableTypedData, InstanceSize, UntaggedTransferableTypedData)   \ | 
|  | SIZEOF(Type, InstanceSize, UntaggedType)                                     \ | 
|  | SIZEOF(TypeParameter, InstanceSize, UntaggedTypeParameter)                   \ | 
|  | SIZEOF(TypeParameters, InstanceSize, UntaggedTypeParameters)                 \ | 
|  | SIZEOF(TypeRef, InstanceSize, UntaggedTypeRef)                               \ | 
|  | SIZEOF(TypedData, HeaderSize, UntaggedTypedData)                             \ | 
|  | SIZEOF(TypedDataBase, InstanceSize, UntaggedTypedDataBase)                   \ | 
|  | SIZEOF(TypedDataView, InstanceSize, UntaggedTypedDataView)                   \ | 
|  | SIZEOF(UnhandledException, InstanceSize, UntaggedUnhandledException)         \ | 
|  | SIZEOF(UnlinkedCall, InstanceSize, UntaggedUnlinkedCall)                     \ | 
|  | SIZEOF(UnwindError, InstanceSize, UntaggedUnwindError)                       \ | 
|  | SIZEOF(UserTag, InstanceSize, UntaggedUserTag)                               \ | 
|  | SIZEOF(WeakProperty, InstanceSize, UntaggedWeakProperty)                     \ | 
|  | SIZEOF(WeakSerializationReference, InstanceSize,                             \ | 
|  | UntaggedWeakSerializationReference)                                   \ | 
|  | PAYLOAD_SIZEOF(CodeSourceMap, InstanceSize, HeaderSize)                      \ | 
|  | PAYLOAD_SIZEOF(CompressedStackMaps, InstanceSize, HeaderSize)                \ | 
|  | PAYLOAD_SIZEOF(InstructionsSection, InstanceSize, HeaderSize)                \ | 
|  | PAYLOAD_SIZEOF(PcDescriptors, InstanceSize, HeaderSize)                      \ | 
|  | PAYLOAD_SIZEOF(TypedData, InstanceSize, HeaderSize) | 
|  |  | 
|  | #define JIT_OFFSETS_LIST(FIELD, ARRAY, SIZEOF, ARRAY_SIZEOF, PAYLOAD_SIZEOF,   \ | 
|  | RANGE, CONSTANT)                                      \ | 
|  | FIELD(Function, usage_counter_offset)                                        \ | 
|  | FIELD(ICData, receivers_static_type_offset) | 
|  |  | 
|  | #define AOT_OFFSETS_LIST(FIELD, ARRAY, SIZEOF, ARRAY_SIZEOF, PAYLOAD_SIZEOF,   \ | 
|  | RANGE, CONSTANT)                                      \ | 
|  | FIELD(Closure, entry_point_offset) | 
|  |  | 
|  | #endif  // RUNTIME_VM_COMPILER_RUNTIME_OFFSETS_LIST_H_ |