xref: /llvm-project/lldb/source/Plugins/Language/CPlusPlus/Coroutines.h (revision b852fb1ec5fa15f0b913cc4988cbd09239b19904)
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