Skip to content

Commit 93e1247

Browse files
committed
Add zend_error_zstr_at and use for fatal errors
1 parent 76dc338 commit 93e1247

File tree

4 files changed

+14
-9
lines changed

4 files changed

+14
-9
lines changed

Zend/zend.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1599,6 +1599,10 @@ ZEND_API ZEND_COLD void zend_error_zstr(int type, zend_string *message) {
15991599
zend_error_impl(type, filename, lineno, message);
16001600
}
16011601

1602+
ZEND_API ZEND_COLD void zend_error_zstr_at(int type, const char *filename, uint32_t lineno, zend_string *message) {
1603+
zend_error_impl(type, filename, lineno, message);
1604+
}
1605+
16021606
ZEND_API ZEND_COLD void zend_throw_error(zend_class_entry *exception_ce, const char *format, ...) /* {{{ */
16031607
{
16041608
va_list va;

Zend/zend.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -333,6 +333,7 @@ ZEND_API ZEND_COLD void zend_error_unchecked(int type, const char *format, ...);
333333
ZEND_API ZEND_COLD void zend_error_at(int type, const char *filename, uint32_t lineno, const char *format, ...) ZEND_ATTRIBUTE_FORMAT(printf, 4, 5);
334334
ZEND_API ZEND_COLD ZEND_NORETURN void zend_error_at_noreturn(int type, const char *filename, uint32_t lineno, const char *format, ...) ZEND_ATTRIBUTE_FORMAT(printf, 4, 5);
335335
ZEND_API ZEND_COLD void zend_error_zstr(int type, zend_string *message);
336+
ZEND_API ZEND_COLD void zend_error_zstr_at(int type, const char *filename, uint32_t lineno, zend_string *message);
336337

337338
ZEND_API ZEND_COLD void zend_throw_error(zend_class_entry *exception_ce, const char *format, ...) ZEND_ATTRIBUTE_FORMAT(printf, 2, 3);
338339
ZEND_API ZEND_COLD void zend_type_error(const char *format, ...) ZEND_ATTRIBUTE_FORMAT(printf, 1, 2);

Zend/zend_fibers.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -315,25 +315,25 @@ static void zend_fiber_switch_to(zend_fiber *fiber) /* {{{ */
315315
}
316316

317317
zend_fiber_error *error = EG(fiber_error);
318-
zend_error_at_noreturn(error->type, error->filename, error->lineno, "%s", ZSTR_VAL(error->message));
318+
zend_error_zstr_at(error->type, error->filename, error->lineno, error->message);
319319
}
320320
}
321321
/* }}} */
322322

323323
/* {{{ */
324-
ZEND_COLD ZEND_NORETURN void zend_error_suspend_fiber(
324+
ZEND_COLD void zend_error_suspend_fiber(
325325
int orig_type, const char *error_filename, uint32_t error_lineno, zend_string *message)
326326
{
327327
ZEND_ASSERT(EG(current_fiber) && "Must be within an active fiber!");
328328

329-
zend_fiber_error error;
329+
zend_fiber_error *error = emalloc(sizeof(zend_fiber_error));
330330

331-
error.type = orig_type;
332-
error.filename = error_filename;
333-
error.lineno = error_lineno;
334-
error.message = message;
331+
error->type = orig_type;
332+
error->filename = error_filename;
333+
error->lineno = error_lineno;
334+
error->message = message;
335335

336-
EG(fiber_error) = &error;
336+
EG(fiber_error) = error;
337337

338338
zend_fiber_suspend(EG(current_fiber));
339339

Zend/zend_fibers.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ const char *zend_fiber_backend_info(void);
101101
ZEND_API zend_bool zend_fiber_init_context(zend_fiber_context *context, zend_fiber_coroutine coroutine, size_t stack_size);
102102
ZEND_API void zend_fiber_destroy_context(zend_fiber_context *context);
103103

104-
ZEND_COLD ZEND_NORETURN void zend_error_suspend_fiber(
104+
ZEND_COLD void zend_error_suspend_fiber(
105105
int orig_type, const char *error_filename, uint32_t error_lineno, zend_string *message);
106106

107107
ZEND_API void zend_fiber_switch_context(zend_fiber_context *to);

0 commit comments

Comments
 (0)