191389000SAdrian Vogelsgesang //===-- Coroutines.h --------------------------------------------*- C++ -*-===// 291389000SAdrian Vogelsgesang // 391389000SAdrian Vogelsgesang // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 491389000SAdrian Vogelsgesang // See https://llvm.org/LICENSE.txt for license information. 591389000SAdrian Vogelsgesang // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 691389000SAdrian Vogelsgesang // 791389000SAdrian Vogelsgesang //===----------------------------------------------------------------------===// 891389000SAdrian Vogelsgesang 991389000SAdrian Vogelsgesang #ifndef LLDB_SOURCE_PLUGINS_LANGUAGE_CPLUSPLUS_COROUTINES_H 1091389000SAdrian Vogelsgesang #define LLDB_SOURCE_PLUGINS_LANGUAGE_CPLUSPLUS_COROUTINES_H 1191389000SAdrian Vogelsgesang 1291389000SAdrian Vogelsgesang #include "lldb/DataFormatters/TypeSummary.h" 1391389000SAdrian Vogelsgesang #include "lldb/DataFormatters/TypeSynthetic.h" 1491389000SAdrian Vogelsgesang #include "lldb/Utility/Stream.h" 15*b852fb1eSJonas Devlieghere #include "lldb/ValueObject/ValueObject.h" 1691389000SAdrian Vogelsgesang 1791389000SAdrian Vogelsgesang namespace lldb_private { 1801f4c305SAdrian Vogelsgesang 1991389000SAdrian Vogelsgesang namespace formatters { 2091389000SAdrian Vogelsgesang 2191389000SAdrian Vogelsgesang /// Summary provider for `std::coroutine_handle<T>` from libc++, libstdc++ and 2291389000SAdrian Vogelsgesang /// MSVC STL. 2391389000SAdrian Vogelsgesang bool StdlibCoroutineHandleSummaryProvider(ValueObject &valobj, Stream &stream, 2491389000SAdrian Vogelsgesang const TypeSummaryOptions &options); 2591389000SAdrian Vogelsgesang 2691389000SAdrian Vogelsgesang /// Synthetic children frontend for `std::coroutine_handle<promise_type>` from 2791389000SAdrian Vogelsgesang /// libc++, libstdc++ and MSVC STL. Shows the compiler-generated `resume` and 2891389000SAdrian Vogelsgesang /// `destroy` function pointers as well as the `promise`, if the promise type 2991389000SAdrian Vogelsgesang /// is `promise_type != void`. 3091389000SAdrian Vogelsgesang class StdlibCoroutineHandleSyntheticFrontEnd 3191389000SAdrian Vogelsgesang : public SyntheticChildrenFrontEnd { 3291389000SAdrian Vogelsgesang public: 3391389000SAdrian Vogelsgesang StdlibCoroutineHandleSyntheticFrontEnd(lldb::ValueObjectSP valobj_sp); 3491389000SAdrian Vogelsgesang 3591389000SAdrian Vogelsgesang ~StdlibCoroutineHandleSyntheticFrontEnd() override; 3691389000SAdrian Vogelsgesang 37624ea68cSAdrian Prantl llvm::Expected<uint32_t> CalculateNumChildren() override; 3891389000SAdrian Vogelsgesang 39e710523eSAdrian Prantl lldb::ValueObjectSP GetChildAtIndex(uint32_t idx) override; 4091389000SAdrian Vogelsgesang 41d7fb94b6SMichael Buch lldb::ChildCacheState Update() override; 4291389000SAdrian Vogelsgesang 4391389000SAdrian Vogelsgesang bool MightHaveChildren() override; 4491389000SAdrian Vogelsgesang 4591389000SAdrian Vogelsgesang size_t GetIndexOfChildWithName(ConstString name) override; 4691389000SAdrian Vogelsgesang 4791389000SAdrian Vogelsgesang private: 488aa31375SAdrian Vogelsgesang lldb::ValueObjectSP m_resume_ptr_sp; 498aa31375SAdrian Vogelsgesang lldb::ValueObjectSP m_destroy_ptr_sp; 508aa31375SAdrian Vogelsgesang lldb::ValueObjectSP m_promise_ptr_sp; 5191389000SAdrian Vogelsgesang }; 5291389000SAdrian Vogelsgesang 5391389000SAdrian Vogelsgesang SyntheticChildrenFrontEnd * 5491389000SAdrian Vogelsgesang StdlibCoroutineHandleSyntheticFrontEndCreator(CXXSyntheticChildren *, 5591389000SAdrian Vogelsgesang lldb::ValueObjectSP); 5691389000SAdrian Vogelsgesang 5791389000SAdrian Vogelsgesang } // namespace formatters 5891389000SAdrian Vogelsgesang } // namespace lldb_private 5991389000SAdrian Vogelsgesang 6091389000SAdrian Vogelsgesang #endif // LLDB_SOURCE_PLUGINS_LANGUAGE_CPLUSPLUS_COROUTINES_H 61