// Copyright (c) 2026, 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. #include "vm/roots.h" #include "vm/dart_api_state.h" #include "vm/dart_entry.h" #include "vm/handles.h" #include "vm/object.h" #include "vm/visitor.h" namespace dart { void Roots::InitVTables() { #define DECL(type, name) name().initRO(name().ptr()); HANDLE_ROOTS_LIST(DECL) #undef DECL for (intptr_t i = 0; i < kNumPredefinedSymbols + 256; i++) { symbol_handle(i).initRO(symbol_handle(i).ptr()); } for (intptr_t i = 0; i < kNumStubEntries; i++) { stub_handle(i).initRO(stub_handle(i).ptr()); } } void Roots::VisitObjectPointers(ObjectPointerVisitor* visitor) { COMPILE_ASSERT(ARRAY_SIZE(raw_.cached_args_descriptors_) == ArgumentsDescriptor::kCachedDescriptorCount); COMPILE_ASSERT(ARRAY_SIZE(raw_.cached_icdata_arrays_) == ICData::kCachedICDataArrayCount); COMPILE_ASSERT(sizeof(Roots::ApiHandle) == sizeof(LocalHandle)); COMPILE_ASSERT(sizeof(Roots::VMHandle) == kVMHandleSizeInWords * kWordSize); visitor->set_gc_root_type("bootstrap roots"); visitor->VisitPointers(from(), to()); visitor->VisitPointers(fromah(), toah()); VMHandle* fromh = this->fromh(); VMHandle* toh = this->toh(); for (VMHandle* h = fromh; h <= toh; h++) { visitor->VisitPointer(&(h->ptr)); } visitor->clear_gc_root_type(); } } // namespace dart