Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Classes | Namespaces | Macros
slot.h File Reference
#include "vm/compiler/backend/compile_type.h"
#include "vm/compiler/backend/locations.h"
#include "vm/thread.h"

Go to the source code of this file.

Classes

class  dart::FieldGuardState
 
class  dart::Slot
 

Namespaces

namespace  dart
 

Macros

#define NULLABLE_TAGGED_NATIVE_DART_SLOTS_LIST(V)
 
#define NONNULLABLE_INT_TAGGED_NATIVE_DART_SLOTS_LIST(V)
 
#define NONNULLABLE_NONINT_TAGGED_NATIVE_DART_SLOTS_LIST(V)
 
#define UNBOXED_NATIVE_DART_SLOTS_LIST(V)
 
#define AOT_ONLY_UNTAGGED_NATIVE_DART_SLOTS_LIST(V)
 
#define UNTAGGED_NATIVE_DART_SLOTS_LIST(V)
 
#define NULLABLE_TAGGED_NATIVE_NONDART_SLOTS_LIST(V)
 
#define UNBOXED_NATIVE_NONDART_SLOTS_LIST(V)    V(StreamInfo, _, enabled, IntPtr, VAR)
 
#define UNTAGGED_NATIVE_NONDART_SLOTS_LIST(V)
 
#define CHECK_NATIVE_NONDART_SLOT(__, ___, ____, gc_may_move, _____)    static_assert(!gc_may_move);
 
#define UNBOXED_NATIVE_SLOTS_LIST(V)
 
#define UNTAGGED_NATIVE_SLOTS_LIST(V)
 
#define NOT_TAGGED_NATIVE_SLOTS_LIST(V)
 
#define TAGGED_INT_NATIVE_SLOTS_LIST(V)    NONNULLABLE_INT_TAGGED_NATIVE_DART_SLOTS_LIST(V)
 
#define TAGGED_NONINT_NATIVE_SLOTS_LIST(V)
 
#define NOT_INT_NATIVE_SLOTS_LIST(V)
 
#define TAGGED_NATIVE_DART_SLOTS_LIST(V)
 
#define NOT_TAGGED_NATIVE_DART_SLOTS_LIST(V)
 
#define TAGGED_NATIVE_SLOTS_LIST(V)
 
#define NATIVE_SLOTS_LIST(V)
 
#define CHECK_TAGGED_NATIVE_SLOT(__, ___, ____, field_type, _____)
 
#define CHECK_INT_NATIVE_SLOT(__, ___, ____, field_type, _____)    static_assert(k##field_type##Cid == kSmiCid);
 
#define CHECK_NONINT_NATIVE_SLOT(__, ___, ____, field_type, _____)
 
#define DECLARE_KIND(ClassName, __, FieldName, ___, ____)    k##ClassName##_##FieldName,
 
#define DEFINE_GETTER(ClassName, __, FieldName, ___, ____)
 

Macro Definition Documentation

◆ AOT_ONLY_UNTAGGED_NATIVE_DART_SLOTS_LIST

#define AOT_ONLY_UNTAGGED_NATIVE_DART_SLOTS_LIST (   V)

Definition at line 187 of file slot.h.

◆ CHECK_INT_NATIVE_SLOT

#define CHECK_INT_NATIVE_SLOT (   __,
  ___,
  ____,
  field_type,
  _____ 
)     static_assert(k##field_type##Cid == kSmiCid);

Definition at line 394 of file slot.h.

409 {
410 public:
411 FieldGuardState() : state_(0) {}
412 explicit FieldGuardState(const Field& field);
413
414 intptr_t guarded_cid() const { return GuardedCidBits::decode(state_); }
415 bool is_nullable() const { return IsNullableBit::decode(state_); }
416
417 private:
418 using GuardedCidBits = BitField<int32_t, ClassIdTagType, 0, 20>;
419 using IsNullableBit = BitField<int32_t, bool, GuardedCidBits::kNextBit, 1>;
420
421 const int32_t state_;
422};
423
424// Slot is an abstraction that describes an readable (and possibly writeable)
425// location within an object.
426//
427// Slot objects returned by Slot::Get* methods have identity and can be
428// compared by pointer. If two slots are different they must not alias.
429// If two slots can alias - they must be represented by identical
430// slot object.
431class Slot : public ZoneAllocated {
432 public:
433 // clang-format off
434 enum class Kind : uint8_t {
435 // Native slots are identified by their kind - each native slot has its own.
436#define DECLARE_KIND(ClassName, __, FieldName, ___, ____) \
437 k##ClassName##_##FieldName,
439#undef DECLARE_KIND
440
441 // A slot used to store type arguments.
442 kTypeArguments,
443
444 // A slot at a specific [index] in a [UntaggedTypeArgument] vector.
445 kTypeArgumentsIndex,
446
447 // A slot corresponding to an array element at given offset.
448 // Only used during allocation sinking and in MaterializeObjectInstr.
449 kArrayElement,
450
451 // A slot corresponding to a record field at the given offset.
452 kRecordField,
453
454 // A slot within a Context object that contains a value of a captured
455 // local variable.
456 kCapturedVariable,
457
458 // A slot that corresponds to a Dart field (has corresponding Field object).
459 kDartField,
460 };
461 // clang-format on
462
463 // Returns a slot that represents length field for the given [array_cid].
464 static const Slot& GetLengthFieldForArrayCid(intptr_t array_cid);
465
466 // Return a slot that represents type arguments field for the given class.
467 //
468 // We do not distinguish type argument fields within disjoint
469 // class hierarchies: type argument fields at the same offset would be
470 // represented by the same Slot object. Type argument slots are final
471 // so disambiguating type arguments fields does not improve alias analysis.
472 static const Slot& GetTypeArgumentsSlotFor(Thread* thread, const Class& cls);
473
474 // Returns a slot at a specific [index] in a [UntaggedTypeArgument] vector.
475 static const Slot& GetTypeArgumentsIndexSlot(Thread* thread, intptr_t index);
476
477 // Returns a slot corresponding to an array element at [offset_in_bytes].
478 static const Slot& GetArrayElementSlot(Thread* thread,
479 intptr_t offset_in_bytes);
480
481 // Returns a slot corresponding to a record field at [offset_in_bytes].
482 static const Slot& GetRecordFieldSlot(Thread* thread,
483 intptr_t offset_in_bytes);
484
485 // Returns a slot that represents the given captured local variable.
486 static const Slot& GetContextVariableSlotFor(Thread* thread,
487 const LocalVariable& var);
488
489 // Returns a slot that represents the given Dart field.
490 static const Slot& Get(const Field& field,
491 const ParsedFunction* parsed_function);
492
493 // Convenience getters for native slots.
494#define DEFINE_GETTER(ClassName, __, FieldName, ___, ____) \
495 static const Slot& ClassName##_##FieldName() { \
496 return GetNativeSlot(Kind::k##ClassName##_##FieldName); \
497 }
498
500#undef DEFINE_GETTER
501
502 Kind kind() const { return kind_; }
503 bool IsDartField() const { return kind() == Kind::kDartField; }
504 bool IsLocalVariable() const { return kind() == Kind::kCapturedVariable; }
505 bool IsTypeArguments() const { return kind() == Kind::kTypeArguments; }
506 bool IsArgumentOfType() const { return kind() == Kind::kTypeArgumentsIndex; }
507 bool IsArrayElement() const { return kind() == Kind::kArrayElement; }
508 bool IsRecordField() const { return kind() == Kind::kRecordField; }
509 bool IsImmutableLengthSlot() const;
510
511 const char* Name() const;
512
513 intptr_t offset_in_bytes() const { return offset_in_bytes_; }
514
515 // Currently returns the representation of unboxed native fields and kTagged
516 // for most other types of fields. One special case: fields marked as
517 // containing non-nullable ints in AOT kernel, which have the kUnboxedInt64
518 // representation.
519 Representation representation() const { return representation_; }
520
521 bool is_immutable() const { return IsImmutableBit::decode(flags_); }
522
523 bool is_weak() const { return IsWeakBit::decode(flags_); }
524
525 // Returns true if properties of this slot were based on the guarded state
526 // of the corresponding Dart field.
527 bool is_guarded_field() const { return IsGuardedBit::decode(flags_); }
528
529 bool is_compressed() const { return IsCompressedBit::decode(flags_); }
530
531 // Returns true if the field is an unboxed native field that may contain an
532 // inner pointer to a GC-movable object.
533 bool may_contain_inner_pointer() const {
534 return MayContainInnerPointerBit::decode(flags_);
535 }
536
537 // Type information about values that can be read from this slot.
538 CompileType type() const { return type_; }
539
540 const Field& field() const {
541 ASSERT(IsDartField());
542 ASSERT(data_ != nullptr);
543 return *DataAs<const Field>();
544 }
545
546 bool Equals(const Slot& other) const;
547 uword Hash() const;
548
549 bool IsIdentical(const Slot& other) const { return this == &other; }
550
551 bool IsContextSlot() const {
552 return kind() == Kind::kCapturedVariable || kind() == Kind::kContext_parent;
553 }
554
555 bool is_tagged() const { return !IsNonTaggedBit::decode(flags_); }
556 bool has_untagged_instance() const {
557 return HasUntaggedInstanceBit::decode(flags_);
558 }
559
560 void Write(FlowGraphSerializer* s) const;
561 static const Slot& Read(FlowGraphDeserializer* d);
562
563 private:
564 Slot(Kind kind,
565 int8_t flags,
566 intptr_t offset_in_bytes,
567 const void* data,
568 CompileType type,
569 Representation representation,
570 const FieldGuardState& field_guard_state = FieldGuardState())
571 : kind_(kind),
572 flags_(flags),
573 offset_in_bytes_(offset_in_bytes),
574 representation_(representation),
575 field_guard_state_(field_guard_state),
576 data_(data),
577 type_(type) {}
578
579 Slot(const Slot& other)
580 : Slot(other.kind_,
581 other.flags_,
582 other.offset_in_bytes_,
583 other.data_,
584 other.type_,
585 other.representation_,
586 other.field_guard_state_) {}
587
588 template <typename T>
589 const T* DataAs() const {
590 return static_cast<const T*>(data_);
591 }
592
593 static const Slot& GetCanonicalSlot(
594 Thread* thread,
595 Kind kind,
596 int8_t flags,
597 intptr_t offset_in_bytes,
598 const void* data,
599 CompileType type,
600 Representation representation,
601 const FieldGuardState& field_guard_state = FieldGuardState());
602
603 static const Slot& GetNativeSlot(Kind kind);
604
605 const FieldGuardState& field_guard_state() const {
606 return field_guard_state_;
607 }
608
609 const Kind kind_;
610 const int8_t flags_;
611 const intptr_t offset_in_bytes_;
612 const Representation representation_;
613
614 const FieldGuardState field_guard_state_;
615
616 // Kind dependent data:
617 // - name as a Dart String object for local variables;
618 // - name as a C string for native slots;
619 // - Field object for Dart fields;
620 const void* data_;
621
622 CompileType type_;
623
624 using IsImmutableBit = BitField<decltype(flags_), bool, 0, 1>;
625 using IsWeakBit =
626 BitField<decltype(flags_), bool, IsImmutableBit::kNextBit, 1>;
627 using IsGuardedBit = BitField<decltype(flags_), bool, IsWeakBit::kNextBit, 1>;
628 using IsCompressedBit =
629 BitField<decltype(flags_), bool, IsGuardedBit::kNextBit, 1>;
630 // Stores whether a field isn't tagged so that tagged is the default value
631 using IsNonTaggedBit =
632 BitField<decltype(flags_), bool, IsCompressedBit::kNextBit, 1>;
633 using MayContainInnerPointerBit =
634 BitField<decltype(flags_), bool, IsNonTaggedBit::kNextBit, 1>;
635 using HasUntaggedInstanceBit =
636 BitField<decltype(flags_), bool, MayContainInnerPointerBit::kNextBit, 1>;
637
638 friend class SlotCache;
639};
640
641} // namespace dart
642
643#endif // RUNTIME_VM_COMPILER_BACKEND_SLOT_H_
static SkWeakReturn is_weak(FcPattern *pattern, const char object[], int id)
bool Equals(const SkPath &a, const SkPath &b)
#define ASSERT(E)
VULKAN_HPP_DEFAULT_DISPATCH_LOADER_DYNAMIC_STORAGE auto & d
Definition main.cc:19
struct MyStruct s
FlutterSemanticsFlag flags
ImplicitString Name
Definition DMSrcSink.h:38
const GrXPFactory * Get(SkBlendMode mode)
SK_API bool Read(SkStreamSeekable *src, SkDocumentPage *dstArray, int dstArrayCount, const SkDeserialProcs *=nullptr)
Representation
Definition locations.h:66
uintptr_t uword
Definition globals.h:501
DEF_SWITCHES_START aot vmservice shared library Name of the *so containing AOT compiled Dart assets for launching the service isolate vm snapshot data
Definition switches.h:41
#define T
#define DECLARE_KIND(CN, __, FN, ___, ____)
Definition slot.cc:17
#define DEFINE_GETTER(ClassName, __, FieldName, ___, ____)
Definition slot.h:494
#define NATIVE_SLOTS_LIST(V)
Definition slot.h:366

◆ CHECK_NATIVE_NONDART_SLOT

#define CHECK_NATIVE_NONDART_SLOT (   __,
  ___,
  ____,
  gc_may_move,
  _____ 
)     static_assert(!gc_may_move);

Definition at line 289 of file slot.h.

◆ CHECK_NONINT_NATIVE_SLOT

#define CHECK_NONINT_NATIVE_SLOT (   __,
  ___,
  ____,
  field_type,
  _____ 
)
Value:
static_assert(k##field_type##Cid != kSmiCid); \
static_assert(k##field_type##Cid != kMintCid);

Definition at line 403 of file slot.h.

◆ CHECK_TAGGED_NATIVE_SLOT

#define CHECK_TAGGED_NATIVE_SLOT (   __,
  ___,
  ____,
  field_type,
  _____ 
)
Value:
static_assert(k##field_type##Cid != kObjectCid); \
static_assert(k##field_type##Cid != kInstanceCid); \
static_assert(k##field_type##Cid != kIntegerCid); \
static_assert(k##field_type##Cid != kStringCid); \
static_assert(k##field_type##Cid != kAbstractTypeCid);

Definition at line 378 of file slot.h.

◆ DECLARE_KIND

#define DECLARE_KIND (   ClassName,
  __,
  FieldName,
  ___,
  ____ 
)     k##ClassName##_##FieldName,

Definition at line 436 of file slot.h.

◆ DEFINE_GETTER

#define DEFINE_GETTER (   ClassName,
  __,
  FieldName,
  ___,
  ____ 
)
Value:
static const Slot& ClassName##_##FieldName() { \
return GetNativeSlot(Kind::k##ClassName##_##FieldName); \
}

Definition at line 494 of file slot.h.

495 { \
496 return GetNativeSlot(Kind::k##ClassName##_##FieldName); \
497 }

◆ NATIVE_SLOTS_LIST

#define NATIVE_SLOTS_LIST (   V)
Value:
NOT_TAGGED_NATIVE_SLOTS_LIST(V)
T __attribute__((ext_vector_type(N))) V
#define TAGGED_NATIVE_SLOTS_LIST(V)
Definition slot.h:359

Definition at line 366 of file slot.h.

◆ NONNULLABLE_INT_TAGGED_NATIVE_DART_SLOTS_LIST

#define NONNULLABLE_INT_TAGGED_NATIVE_DART_SLOTS_LIST (   V)
Value:
V(Array, UntaggedArray, length, Smi, FINAL) \
V(Closure, UntaggedClosure, hash, Smi, VAR) \
V(GrowableObjectArray, UntaggedGrowableObjectArray, length, Smi, VAR) \
V(TypedDataBase, UntaggedTypedDataBase, length, Smi, FINAL) \
V(TypedDataView, UntaggedTypedDataView, offset_in_bytes, Smi, FINAL) \
V(String, UntaggedString, length, Smi, FINAL) \
V(LinkedHashBase, UntaggedLinkedHashBase, hash_mask, Smi, VAR) \
V(LinkedHashBase, UntaggedLinkedHashBase, used_data, Smi, VAR) \
V(LinkedHashBase, UntaggedLinkedHashBase, deleted_keys, Smi, VAR) \
V(ArgumentsDescriptor, UntaggedArray, type_args_len, Smi, FINAL) \
V(ArgumentsDescriptor, UntaggedArray, positional_count, Smi, FINAL) \
V(ArgumentsDescriptor, UntaggedArray, count, Smi, FINAL) \
V(ArgumentsDescriptor, UntaggedArray, size, Smi, FINAL) \
V(Record, UntaggedRecord, shape, Smi, FINAL) \
V(TypeArguments, UntaggedTypeArguments, hash, Smi, VAR) \
V(TypeArguments, UntaggedTypeArguments, length, Smi, FINAL) \
V(AbstractType, UntaggedTypeArguments, hash, Smi, VAR)
int count
static uint32_t hash(const SkShaderBase::GradientInfo &v)
size_t length
#define V(name)
Definition raw_object.h:124

Definition at line 102 of file slot.h.

◆ NONNULLABLE_NONINT_TAGGED_NATIVE_DART_SLOTS_LIST

#define NONNULLABLE_NONINT_TAGGED_NATIVE_DART_SLOTS_LIST (   V)
Value:
V(Closure, UntaggedClosure, function, Function, FINAL) \
V(Closure, UntaggedClosure, context, Dynamic, FINAL) \
V(Finalizer, UntaggedFinalizer, callback, Closure, FINAL) \
V(NativeFinalizer, UntaggedFinalizer, callback, Pointer, FINAL) \
V(Function, UntaggedFunction, data, Dynamic, FINAL) \
V(FunctionType, UntaggedFunctionType, named_parameter_names, Array, FINAL) \
V(FunctionType, UntaggedFunctionType, parameter_types, Array, FINAL) \
V(GrowableObjectArray, UntaggedGrowableObjectArray, data, Array, VAR) \
V(TypedDataView, UntaggedTypedDataView, typed_data, Dynamic, FINAL) \
V(LinkedHashBase, UntaggedLinkedHashBase, index, TypedDataUint32Array, VAR) \
V(LinkedHashBase, UntaggedLinkedHashBase, data, Array, VAR) \
V(ImmutableLinkedHashBase, UntaggedLinkedHashBase, data, ImmutableArray, \
FINAL) \
V(TypeParameters, UntaggedTypeParameters, names, Array, FINAL) \
V(UnhandledException, UntaggedUnhandledException, exception, Dynamic, FINAL) \
V(UnhandledException, UntaggedUnhandledException, stacktrace, Dynamic, FINAL)
FlKeyEvent uint64_t FlKeyResponderAsyncCallback callback
Dart_NativeFunction function
Definition fuchsia.cc:51

Definition at line 134 of file slot.h.

◆ NOT_INT_NATIVE_SLOTS_LIST

#define NOT_INT_NATIVE_SLOTS_LIST (   V)
Value:
UNTAGGED_NATIVE_SLOTS_LIST(V)
#define TAGGED_NONINT_NATIVE_SLOTS_LIST(V)
Definition slot.h:326

Definition at line 335 of file slot.h.

◆ NOT_TAGGED_NATIVE_DART_SLOTS_LIST

#define NOT_TAGGED_NATIVE_DART_SLOTS_LIST (   V)
Value:
NOT_TAGGED_NATIVE_SLOTS_LIST(V)
#define NULLABLE_TAGGED_NATIVE_NONDART_SLOTS_LIST(V)
Definition slot.h:230

Definition at line 352 of file slot.h.

◆ NOT_TAGGED_NATIVE_SLOTS_LIST

#define NOT_TAGGED_NATIVE_SLOTS_LIST (   V)
Value:
UNTAGGED_NATIVE_SLOTS_LIST(V)
#define UNBOXED_NATIVE_SLOTS_LIST(V)
Definition slot.h:297

Definition at line 311 of file slot.h.

◆ NULLABLE_TAGGED_NATIVE_DART_SLOTS_LIST

#define NULLABLE_TAGGED_NATIVE_DART_SLOTS_LIST (   V)

Definition at line 54 of file slot.h.

◆ NULLABLE_TAGGED_NATIVE_NONDART_SLOTS_LIST

#define NULLABLE_TAGGED_NATIVE_NONDART_SLOTS_LIST (   V)
Value:
V(Isolate, _, finalizers, GrowableObjectArray, VAR) \
V(LocalHandle, _, ptr, Dynamic, VAR) \
V(ObjectStore, _, record_field_names, Array, VAR) \
V(PersistentHandle, _, ptr, Dynamic, VAR)

Definition at line 230 of file slot.h.

◆ TAGGED_INT_NATIVE_SLOTS_LIST

#define TAGGED_INT_NATIVE_SLOTS_LIST (   V)     NONNULLABLE_INT_TAGGED_NATIVE_DART_SLOTS_LIST(V)

Definition at line 318 of file slot.h.

◆ TAGGED_NATIVE_DART_SLOTS_LIST

#define TAGGED_NATIVE_DART_SLOTS_LIST (   V)
Value:
NONNULLABLE_INT_TAGGED_NATIVE_DART_SLOTS_LIST(V) \
NONNULLABLE_NONINT_TAGGED_NATIVE_DART_SLOTS_LIST(V)
#define NULLABLE_TAGGED_NATIVE_DART_SLOTS_LIST(V)
Definition slot.h:54

Definition at line 343 of file slot.h.

◆ TAGGED_NATIVE_SLOTS_LIST

#define TAGGED_NATIVE_SLOTS_LIST (   V)
Value:
TAGGED_NONINT_NATIVE_SLOTS_LIST(V)
#define TAGGED_INT_NATIVE_SLOTS_LIST(V)
Definition slot.h:318

Definition at line 359 of file slot.h.

◆ TAGGED_NONINT_NATIVE_SLOTS_LIST

#define TAGGED_NONINT_NATIVE_SLOTS_LIST (   V)
Value:
NONNULLABLE_NONINT_TAGGED_NATIVE_DART_SLOTS_LIST(V) \
NULLABLE_TAGGED_NATIVE_NONDART_SLOTS_LIST(V)

Definition at line 326 of file slot.h.

◆ UNBOXED_NATIVE_DART_SLOTS_LIST

#define UNBOXED_NATIVE_DART_SLOTS_LIST (   V)
Value:
V(AbstractType, UntaggedAbstractType, flags, Uint32, FINAL) \
V(ClosureData, UntaggedClosureData, packed_fields, Uint32, FINAL) \
V(FinalizerEntry, UntaggedFinalizerEntry, external_size, IntPtr, VAR) \
V(Function, UntaggedFunction, kind_tag, Uint32, FINAL) \
V(FunctionType, UntaggedFunctionType, packed_parameter_counts, Uint32, \
FINAL) \
V(FunctionType, UntaggedFunctionType, packed_type_parameter_counts, Uint16, \
FINAL) \
V(SubtypeTestCache, UntaggedSubtypeTestCache, num_inputs, Uint32, FINAL)

Definition at line 170 of file slot.h.

◆ UNBOXED_NATIVE_NONDART_SLOTS_LIST

#define UNBOXED_NATIVE_NONDART_SLOTS_LIST (   V)     V(StreamInfo, _, enabled, IntPtr, VAR)

Definition at line 253 of file slot.h.

◆ UNBOXED_NATIVE_SLOTS_LIST

#define UNBOXED_NATIVE_SLOTS_LIST (   V)
Value:
UNBOXED_NATIVE_NONDART_SLOTS_LIST(V)
#define UNBOXED_NATIVE_DART_SLOTS_LIST(V)
Definition slot.h:170

Definition at line 297 of file slot.h.

◆ UNTAGGED_NATIVE_DART_SLOTS_LIST

#define UNTAGGED_NATIVE_DART_SLOTS_LIST (   V)
Value:
V(Function, UntaggedFunction, entry_point, false, FINAL) \
V(FinalizerBase, UntaggedFinalizerBase, isolate, false, VAR) \
V(PointerBase, UntaggedPointerBase, data, true, VAR)
#define AOT_ONLY_UNTAGGED_NATIVE_DART_SLOTS_LIST(V)
Definition slot.h:187

Definition at line 209 of file slot.h.

◆ UNTAGGED_NATIVE_NONDART_SLOTS_LIST

#define UNTAGGED_NATIVE_NONDART_SLOTS_LIST (   V)
Value:
V(IsolateGroup, _, object_store, false, FINAL) \
V(Thread, _, api_top_scope, false, VAR) \
V(Thread, _, isolate, false, FINAL) \
V(Thread, _, isolate_group, false, FINAL) \
V(Thread, _, service_extension_stream, false, FINAL)

Definition at line 279 of file slot.h.

◆ UNTAGGED_NATIVE_SLOTS_LIST

#define UNTAGGED_NATIVE_SLOTS_LIST (   V)
Value:
UNTAGGED_NATIVE_NONDART_SLOTS_LIST(V)
#define UNTAGGED_NATIVE_DART_SLOTS_LIST(V)
Definition slot.h:209

Definition at line 304 of file slot.h.