Async-Trampoline
view release on metacpan or search on metacpan
lib/Async/Trampoline.xs++ view on Meta::CPAN
#define ASYNC_TYPE_IS_CANCEL ASYNC_TYPE_GET(IS_CANCEL)
#define ASYNC_TYPE_IS_ERROR ASYNC_TYPE_GET(IS_ERROR)
#define ASYNC_TYPE_IS_VALUE ASYNC_TYPE_GET(IS_VALUE)
MODULE = Async::Trampoline PACKAGE = Async::Trampoline
void
Async::run_until_completion()
INIT:
CXX_TRY
PPCODE:
{
Async_run_until_completion(THIS);
Async& result = THIS->ptr_follow();
if (!result.has_category(Async_Type::CATEGORY_COMPLETE))
{
croak( "run_until_completion() did not complete " ASYNC_FORMAT,
ASYNC_FORMAT_ARGS(&result));
}
lib/Async/Trampoline.xs++ view on Meta::CPAN
else if (result.has_type(Async_Type::IS_ERROR))
{
croak_sv((SV*) result.as_error.data);
}
else if (result.has_type(Async_Type::IS_VALUE))
{
ASYNC_LOG_DEBUG("returning to Perl: " ASYNC_FORMAT "\n",
ASYNC_FORMAT_ARGS(&result));
DestructibleTuple& values = result.as_value;
XSprePUSH; // to fix weird XS+PPCODE argument handling
EXTEND(SP, static_cast<ssize_t>(values.size));
for (auto value : values)
{
ASYNC_LOG_DEBUG(" - " DESTRUCTIBLE_FORMAT "\n",
DESTRUCTIBLE_FORMAT_ARGS_BORROWED(values.vtable, value));
PUSHs(sv_mortalcopy((SV*) value));
}
ASYNC_LOG_DEBUG("result end\n");
( run in 1.600 second using v1.01-cache-2.11-cpan-71847e10f99 )