ZEND_METHOD(exception, __wakeup) { zval value, *pvalue; zval *object = getThis(); CHECK_EXC_TYPE("message", IS_STRING); CHECK_EXC_TYPE("string", IS_STRING); CHECK_EXC_TYPE("code", IS_LONG); CHECK_EXC_TYPE("file", IS_STRING); CHECK_EXC_TYPE("line", IS_LONG); CHECK_EXC_TYPE("trace", IS_ARRAY); CHECK_EXC_TYPE("previous", IS_OBJECT); }
ZEND_METHOD(exception, __wakeup) { zval value, *pvalue; zval *object = getThis(); CHECK_EXC_TYPE(ZEND_STR_MESSAGE, IS_STRING); CHECK_EXC_TYPE(ZEND_STR_STRING, IS_STRING); CHECK_EXC_TYPE(ZEND_STR_CODE, IS_LONG); CHECK_EXC_TYPE(ZEND_STR_FILE, IS_STRING); CHECK_EXC_TYPE(ZEND_STR_LINE, IS_LONG); CHECK_EXC_TYPE(ZEND_STR_TRACE, IS_ARRAY); pvalue = zend_read_property(i_get_exception_base(object), object, "previous", sizeof("previous")-1, 1, &value); if (pvalue && Z_TYPE_P(pvalue) != IS_NULL && (Z_TYPE_P(pvalue) != IS_OBJECT || !instanceof_function(Z_OBJCE_P(pvalue), i_get_exception_base(object)) || pvalue == object)) { zend_unset_property(i_get_exception_base(object), object, "previous", sizeof("previous")-1); } }