Skip to content

Commit 1a5da26

Browse files
committed
Drop zend_fiber API
1 parent 388d31b commit 1a5da26

File tree

2 files changed

+24
-63
lines changed

2 files changed

+24
-63
lines changed

Zend/zend_fibers.c

Lines changed: 23 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -413,18 +413,6 @@ static void zend_fiber_object_free(zend_object *object)
413413
zend_object_std_dtor(&fiber->std);
414414
}
415415

416-
ZEND_API zend_fiber *zend_fiber_create(const zend_fcall_info *fci, const zend_fcall_info_cache *fci_cache)
417-
{
418-
zend_fiber *fiber = (zend_fiber *) zend_fiber_object_create(zend_ce_fiber);
419-
420-
fiber->fci = *fci;
421-
fiber->fci_cache = *fci_cache;
422-
423-
Z_TRY_ADDREF(fiber->fci.function_name);
424-
425-
return fiber;
426-
}
427-
428416
ZEND_METHOD(Fiber, __construct)
429417
{
430418
zend_fiber *fiber = (zend_fiber *) Z_OBJ_P(getThis());
@@ -437,9 +425,16 @@ ZEND_METHOD(Fiber, __construct)
437425
Z_TRY_ADDREF(fiber->fci.function_name);
438426
}
439427

440-
ZEND_API void zend_fiber_start(zend_fiber *fiber, zval *params, uint32_t param_count, zend_array *named_params, zval *return_value)
428+
ZEND_METHOD(Fiber, start)
441429
{
442-
zend_fiber_context *context = zend_fiber_get_context(fiber);
430+
zend_fiber *fiber = (zend_fiber *) Z_OBJ_P(getThis());
431+
zval *params;
432+
uint32_t param_count;
433+
zend_array *named_params;
434+
435+
ZEND_PARSE_PARAMETERS_START(0, -1)
436+
Z_PARAM_VARIADIC_WITH_NAMED(params, param_count, named_params);
437+
ZEND_PARSE_PARAMETERS_END();
443438

444439
if (fiber->status != ZEND_FIBER_STATUS_INIT) {
445440
zend_throw_error(zend_ce_fiber_error, "Cannot start a fiber that has already been started");
@@ -450,6 +445,8 @@ ZEND_API void zend_fiber_start(zend_fiber *fiber, zval *params, uint32_t param_c
450445
fiber->fci.param_count = param_count;
451446
fiber->fci.named_params = named_params;
452447

448+
zend_fiber_context *context = zend_fiber_get_context(fiber);
449+
453450
if (!zend_fiber_init_context(context, zend_ce_fiber, zend_fiber_execute, EG(fiber_stack_size))) {
454451
RETURN_THROWS();
455452
}
@@ -464,22 +461,15 @@ ZEND_API void zend_fiber_start(zend_fiber *fiber, zval *params, uint32_t param_c
464461
ZVAL_UNDEF(&fiber->value);
465462
}
466463

467-
ZEND_METHOD(Fiber, start)
464+
ZEND_METHOD(Fiber, suspend)
468465
{
469-
zend_fiber *fiber = (zend_fiber *) Z_OBJ_P(getThis());
470-
zval *params;
471-
uint32_t param_count;
472-
zend_array *named_params;
466+
zval *value = NULL;
473467

474-
ZEND_PARSE_PARAMETERS_START(0, -1)
475-
Z_PARAM_VARIADIC_WITH_NAMED(params, param_count, named_params);
468+
ZEND_PARSE_PARAMETERS_START(0, 1)
469+
Z_PARAM_OPTIONAL
470+
Z_PARAM_ZVAL(value);
476471
ZEND_PARSE_PARAMETERS_END();
477472

478-
zend_fiber_start(fiber, params, param_count, named_params, return_value);
479-
}
480-
481-
ZEND_API void zend_fiber_suspend(zval *value, zval *return_value)
482-
{
483473
if (UNEXPECTED(EG(current_fiber)->kind != zend_ce_fiber)) {
484474
zend_throw_error(zend_ce_fiber_error, "Cannot suspend outside of a fiber");
485475
RETURN_THROWS();
@@ -523,20 +513,18 @@ ZEND_API void zend_fiber_suspend(zval *value, zval *return_value)
523513
ZVAL_UNDEF(&fiber->value);
524514
}
525515

526-
ZEND_METHOD(Fiber, suspend)
516+
ZEND_METHOD(Fiber, resume)
527517
{
518+
zend_fiber *fiber;
528519
zval *value = NULL;
529520

530521
ZEND_PARSE_PARAMETERS_START(0, 1)
531522
Z_PARAM_OPTIONAL
532523
Z_PARAM_ZVAL(value);
533524
ZEND_PARSE_PARAMETERS_END();
534525

535-
zend_fiber_suspend(value, return_value);
536-
}
526+
fiber = (zend_fiber *) Z_OBJ_P(getThis());
537527

538-
ZEND_API void zend_fiber_resume(zend_fiber *fiber, zval *value, zval *return_value)
539-
{
540528
if (UNEXPECTED(fiber->status != ZEND_FIBER_STATUS_SUSPENDED || fiber->caller != NULL)) {
541529
zend_throw_error(zend_ce_fiber_error, "Cannot resume a fiber that is not suspended");
542530
RETURN_THROWS();
@@ -560,23 +548,17 @@ ZEND_API void zend_fiber_resume(zend_fiber *fiber, zval *value, zval *return_val
560548
ZVAL_UNDEF(&fiber->value);
561549
}
562550

563-
ZEND_METHOD(Fiber, resume)
551+
ZEND_METHOD(Fiber, throw)
564552
{
565553
zend_fiber *fiber;
566-
zval *value = NULL;
554+
zval *exception;
567555

568-
ZEND_PARSE_PARAMETERS_START(0, 1)
569-
Z_PARAM_OPTIONAL
570-
Z_PARAM_ZVAL(value);
556+
ZEND_PARSE_PARAMETERS_START(1, 1)
557+
Z_PARAM_OBJECT_OF_CLASS(exception, zend_ce_throwable)
571558
ZEND_PARSE_PARAMETERS_END();
572559

573560
fiber = (zend_fiber *) Z_OBJ_P(getThis());
574561

575-
zend_fiber_resume(fiber, value, return_value);
576-
}
577-
578-
ZEND_API void zend_fiber_throw(zend_fiber *fiber, zval *exception, zval *return_value)
579-
{
580562
if (UNEXPECTED(fiber->status != ZEND_FIBER_STATUS_SUSPENDED || fiber->caller != NULL)) {
581563
zend_throw_error(zend_ce_fiber_error, "Cannot resume a fiber that is not suspended");
582564
RETURN_THROWS();
@@ -597,20 +579,6 @@ ZEND_API void zend_fiber_throw(zend_fiber *fiber, zval *exception, zval *return_
597579
ZVAL_UNDEF(&fiber->value);
598580
}
599581

600-
ZEND_METHOD(Fiber, throw)
601-
{
602-
zend_fiber *fiber;
603-
zval *exception;
604-
605-
ZEND_PARSE_PARAMETERS_START(1, 1)
606-
Z_PARAM_OBJECT_OF_CLASS(exception, zend_ce_throwable)
607-
ZEND_PARSE_PARAMETERS_END();
608-
609-
fiber = (zend_fiber *) Z_OBJ_P(getThis());
610-
611-
zend_fiber_throw(fiber, exception, return_value);
612-
}
613-
614582
ZEND_METHOD(Fiber, isStarted)
615583
{
616584
zend_fiber *fiber;

Zend/zend_fibers.h

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -123,14 +123,7 @@ struct _zend_fiber {
123123
zval value;
124124
};
125125

126-
/* These functions create and manipulate a Fiber object, allowing any internal function to start, resume, or suspend a fiber. */
127-
ZEND_API zend_fiber *zend_fiber_create(const zend_fcall_info *fci, const zend_fcall_info_cache *fci_cache);
128-
ZEND_API void zend_fiber_start(zend_fiber *fiber, zval *params, uint32_t param_count, zend_array *named_params, zval *return_value);
129-
ZEND_API void zend_fiber_suspend(zval *value, zval *return_value);
130-
ZEND_API void zend_fiber_resume(zend_fiber *fiber, zval *value, zval *return_value);
131-
ZEND_API void zend_fiber_throw(zend_fiber *fiber, zval *exception, zval *return_value);
132-
133-
/* These functions may be used to create custom fibers (coroutines) using the bundled fiber switching context. */
126+
/* These functions may be used to create custom fiber objects using the bundled fiber switching context. */
134127
ZEND_API bool zend_fiber_init_context(zend_fiber_context *context, void *kind, zend_fiber_coroutine coroutine, size_t stack_size);
135128
ZEND_API void zend_fiber_destroy_context(zend_fiber_context *context);
136129
ZEND_API zend_fiber_context *zend_fiber_switch_context(zend_fiber_context *to);

0 commit comments

Comments
 (0)