// Copyright (c) 2022, 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/instructions.h" #include "vm/object.h" #if defined(DART_PRECOMPILER) #include "vm/compiler/aot/precompiler.h" #endif namespace dart { bool ObjectAtPoolIndex(const Code& code, intptr_t index, Object* obj) { #if defined(DART_PRECOMPILER) if (FLAG_precompiled_mode) { Precompiler* precompiler = Precompiler::Instance(); if (precompiler != nullptr) { compiler::ObjectPoolBuilder* pool = precompiler->global_object_pool_builder(); if (index < pool->CurrentLength()) { compiler::ObjectPoolBuilderEntry& entry = pool->EntryAt(index); if (entry.type() == compiler::ObjectPoolBuilderEntry::kTaggedObject) { *obj = entry.obj_->ptr(); return true; } } } return false; } #endif const ObjectPool& pool = ObjectPool::Handle(code.GetObjectPool()); if (!pool.IsNull() && (index < pool.Length()) && (pool.TypeAt(index) == ObjectPool::EntryType::kTaggedObject)) { *obj = pool.ObjectAt(index); return true; } return false; } } // namespace dart