function afterInvoke($name, array $args, stdClass $context, $result)
{
if ($context->async && is_callable($args[count($args) - 1])) {
unset($args[count($args) - 1]);
}
if ($context->passContext && $args[count($args) - 1] === $context) {
unset($args[count($args) - 1]);
}
if ($this->onAfterInvoke !== null) {
$onAfterInvoke = $this->onAfterInvoke;
$value = call_user_func_array($onAfterInvoke, array($name, &$args, $context->byref, &$result, $context));
if ($value instanceof Exception || $value instanceof Throwable) {
throw $value;
}
if (Future\isFuture($value)) {
$self = $this;
return $value->then(function ($value) use($self, $args, $context, $result) {
if ($value instanceof Exception || $value instanceof Throwable) {
throw $value;
}
return $self->doOutput($args, $context, $result);
});
}
}
return $this->doOutput($args, $context, $result);
}