#include "impl.h" #include "trampoline.h" #include "stack/stack_allocator.h" #include #include #include #include #include #include namespace NCoro { TTrampoline::TTrampoline(NStack::IAllocator& allocator, ui32 stackSize, TFunc f, TCont* cont) noexcept : Stack_(allocator, stackSize, cont->Name()) , Clo_{this, Stack_.Get(), cont->Name()} , Ctx_(Clo_) , Func_(std::move(f)) , Cont_(cont) {} void TTrampoline::DoRun() { if (Cont_->Executor()->FailOnError()) { Func_(Cont_); } else { try { Func_(Cont_); } catch (...) {} } Cont_->Terminate(); } TArrayRef TTrampoline::Stack() noexcept { return Stack_.Get(); } const char* TTrampoline::ContName() const noexcept { return Cont_->Name(); } void TTrampoline::DoRunNaked() { DoRun(); abort(); } }