@@ -33,7 +33,33 @@ | |||
#include <optional> | |||
#include <thread> | |||
#include <cassert> | |||
#ifdef __cpp_impl_coroutine | |||
#include <coroutine> | |||
#ifdef _MSC_VER | |||
extern "C" size_t _coro_frame_size(); | |||
extern "C" void* _coro_frame_ptr(); | |||
extern "C" void _coro_init_block(); | |||
extern "C" void* _coro_resume_addr(); | |||
extern "C" void _coro_init_frame(void*); | |||
extern "C" void _coro_save(size_t); | |||
extern "C" void _coro_suspend(size_t); | |||
extern "C" void _coro_cancel(); | |||
extern "C" void _coro_resume_block(); | |||
#pragma intrinsic(_coro_frame_size) | |||
#pragma intrinsic(_coro_frame_ptr) | |||
#pragma intrinsic(_coro_init_block) | |||
#pragma intrinsic(_coro_resume_addr) | |||
#pragma intrinsic(_coro_init_frame) | |||
#pragma intrinsic(_coro_save) | |||
#pragma intrinsic(_coro_suspend) | |||
#pragma intrinsic(_coro_cancel) | |||
#pragma intrinsic(_coro_resume_block) | |||
#endif | |||
#else | |||
#include <experimental/coroutine> | |||
#endif | |||
#include "src/stop_token.hpp" | |||
@@ -2,6 +2,7 @@ | |||
#define LIB_RESUMEF_VERSION 30000 // 3.0.0 | |||
#ifndef __cpp_impl_coroutine | |||
namespace std | |||
{ | |||
using experimental::coroutine_traits; | |||
@@ -10,6 +11,7 @@ namespace std | |||
using experimental::suspend_always; | |||
using experimental::suspend_never; | |||
} | |||
#endif | |||
namespace resumef | |||
{ |
@@ -36,7 +36,7 @@ namespace resumef | |||
} | |||
template<class _PromiseT/*, typename = std::enable_if_t<traits::is_promise_v<_PromiseT>>*/> | |||
void await_suspend(coroutine_handle<_PromiseT> handler) | |||
void await_suspend(coroutine_handle<_PromiseT> handler) const | |||
{ | |||
_state->future_await_suspend(handler); | |||
} |
@@ -161,7 +161,7 @@ namespace resumef | |||
//ref_state()->set_exception(std::move(e)); | |||
std::terminate(); | |||
} | |||
#if defined(__clang__) || defined(__GNUC__) | |||
#if defined(__cpp_impl_coroutine) || defined(__clang__) || defined(__GNUC__) | |||
void unhandled_exception() | |||
{ | |||
//this->ref_state()->set_exception(std::current_exception()); |
@@ -105,7 +105,8 @@ | |||
<Optimization>Disabled</Optimization> | |||
<PreprocessorDefinitions>_WIN32_WINNT=0x0601;_CONSOLE;ASIO_STANDALONE;_SILENCE_CXX17_ALLOCATOR_VOID_DEPRECATION_WARNING=1;ASIO_DISABLE_CONCEPTS=1;RESUMEF_ENABLE_MULT_SCHEDULER=1;RESUMEF_DEBUG_COUNTER=0;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> | |||
<AdditionalIncludeDirectories>..\librf;..\..\asio\asio\include;..\..\asio-1.10.6\include;..\modern_cb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> | |||
<AdditionalOptions>/await</AdditionalOptions> | |||
<AdditionalOptions> | |||
</AdditionalOptions> | |||
<MultiProcessorCompilation>true</MultiProcessorCompilation> | |||
<LanguageStandard>stdcpplatest</LanguageStandard> | |||
<CLanguageStandard>c11</CLanguageStandard> |