mirror of
https://github.com/php/php-src.git
synced 2026-03-26 09:12:14 +01:00
assert() user message
Added 2nd, optional, param to assert. When passed in it will be added to the printed warnings and passed as a 4th param to a callback. PR 150 by Lonny Kapelushnik
This commit is contained in:
2
NEWS
2
NEWS
@@ -24,6 +24,8 @@ PHP NEWS
|
||||
(srgoogleguy, Gustavo)
|
||||
. Implemented FR #60738 (Allow 'set_error_handler' to handle NULL).
|
||||
(Laruence, Nikita Popov)
|
||||
. Added optional second argument for assert() to specify custom message. Patch
|
||||
by Lonny Kapelushnik (lonny@lonnylot.com). (Lars)
|
||||
|
||||
- cURL:
|
||||
. Added support for CURLOPT_FTP_RESPONSE_TIMEOUT, CURLOPT_APPEND,
|
||||
|
||||
@@ -136,20 +136,20 @@ PHP_MINFO_FUNCTION(assert) /* {{{ */
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ proto int assert(string|bool assertion)
|
||||
/* {{{ proto int assert(string|bool assertion[, string description])
|
||||
Checks if assertion is false */
|
||||
PHP_FUNCTION(assert)
|
||||
{
|
||||
zval **assertion;
|
||||
int val;
|
||||
int val, description_len = 0;
|
||||
char *myeval = NULL;
|
||||
char *compiled_string_description;
|
||||
char *compiled_string_description, *description;
|
||||
|
||||
if (! ASSERTG(active)) {
|
||||
RETURN_TRUE;
|
||||
}
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Z", &assertion) == FAILURE) {
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Z|s", &assertion, &description, &description_len) == FAILURE) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -167,7 +167,11 @@ PHP_FUNCTION(assert)
|
||||
compiled_string_description = zend_make_compiled_string_description("assert code" TSRMLS_CC);
|
||||
if (zend_eval_stringl(myeval, Z_STRLEN_PP(assertion), &retval, compiled_string_description TSRMLS_CC) == FAILURE) {
|
||||
efree(compiled_string_description);
|
||||
php_error_docref(NULL TSRMLS_CC, E_RECOVERABLE_ERROR, "Failure evaluating code: %s%s", PHP_EOL, myeval);
|
||||
if (description_len == 0) {
|
||||
php_error_docref(NULL TSRMLS_CC, E_RECOVERABLE_ERROR, "Failure evaluating code: %s%s", PHP_EOL, myeval);
|
||||
} else {
|
||||
php_error_docref(NULL TSRMLS_CC, E_RECOVERABLE_ERROR, "Failure evaluating code: %s%s:\"%s\"", PHP_EOL, description, myeval);
|
||||
}
|
||||
if (ASSERTG(bail)) {
|
||||
zend_bailout();
|
||||
}
|
||||
@@ -196,7 +200,7 @@ PHP_FUNCTION(assert)
|
||||
}
|
||||
|
||||
if (ASSERTG(callback)) {
|
||||
zval *args[3];
|
||||
zval **args = safe_emalloc(description_len == 0 ? 3 : 4, sizeof(zval **), 0);
|
||||
zval *retval;
|
||||
int i;
|
||||
uint lineno = zend_get_executed_lineno(TSRMLS_C);
|
||||
@@ -214,19 +218,38 @@ PHP_FUNCTION(assert)
|
||||
ZVAL_FALSE(retval);
|
||||
|
||||
/* XXX do we want to check for error here? */
|
||||
call_user_function(CG(function_table), NULL, ASSERTG(callback), retval, 3, args TSRMLS_CC);
|
||||
if (description_len == 0) {
|
||||
call_user_function(CG(function_table), NULL, ASSERTG(callback), retval, 3, args TSRMLS_CC);
|
||||
for (i = 0; i <= 2; i++) {
|
||||
zval_ptr_dtor(&(args[i]));
|
||||
}
|
||||
} else {
|
||||
MAKE_STD_ZVAL(args[3]);
|
||||
ZVAL_STRINGL(args[3], SAFE_STRING(description), description_len, 1);
|
||||
|
||||
for (i = 0; i <= 2; i++) {
|
||||
zval_ptr_dtor(&(args[i]));
|
||||
call_user_function(CG(function_table), NULL, ASSERTG(callback), retval, 4, args TSRMLS_CC);
|
||||
for (i = 0; i <= 3; i++) {
|
||||
zval_ptr_dtor(&(args[i]));
|
||||
}
|
||||
}
|
||||
|
||||
efree(args);
|
||||
zval_ptr_dtor(&retval);
|
||||
}
|
||||
|
||||
if (ASSERTG(warning)) {
|
||||
if (myeval) {
|
||||
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Assertion \"%s\" failed", myeval);
|
||||
if (description_len == 0) {
|
||||
if (myeval) {
|
||||
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Assertion \"%s\" failed", myeval);
|
||||
} else {
|
||||
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Assertion failed");
|
||||
}
|
||||
} else {
|
||||
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Assertion failed");
|
||||
if (myeval) {
|
||||
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s: \"%s\" failed", description, myeval);
|
||||
} else {
|
||||
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s failed", description);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -321,3 +344,4 @@ PHP_FUNCTION(assert_options)
|
||||
* vim600: sw=4 ts=4 fdm=marker
|
||||
* vim<600: sw=4 ts=4
|
||||
*/
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ assert(1);
|
||||
|
||||
/* Wrong parameter count in assert */
|
||||
assert_options(ASSERT_ACTIVE, 1);
|
||||
assert(2,3);
|
||||
assert(2, "failure", 3);
|
||||
|
||||
/* Wrong parameter count in assert_options */
|
||||
assert_options(ASSERT_ACTIVE, 0, 2);
|
||||
@@ -36,7 +36,7 @@ echo "not reached\n";
|
||||
|
||||
?>
|
||||
--EXPECTF--
|
||||
Warning: assert() expects exactly 1 parameter, 2 given in %s on line %d
|
||||
Warning: assert() expects at most 2 parameters, 3 given in %s on line %d
|
||||
|
||||
Warning: assert_options() expects at most 2 parameters, 3 given in %s on line %d
|
||||
|
||||
@@ -45,3 +45,4 @@ Warning: assert_options() expects parameter 1 to be long, %unicode_string_option
|
||||
Warning: assert(): Assertion failed in %s on line %d
|
||||
|
||||
Warning: assert(): Assertion failed in %s on line %d
|
||||
|
||||
|
||||
@@ -20,19 +20,19 @@ function handler($errno, $errstr) {
|
||||
|
||||
//Wrong number of parameters for assert_options()
|
||||
assert_options(ASSERT_WARNING, 1);
|
||||
var_dump($rao=assert_options(ASSERT_CALLBACK,"f1",1));
|
||||
var_dump($rao = assert_options(ASSERT_CALLBACK, "f1", 1));
|
||||
|
||||
|
||||
//Unknown option for assert_options()
|
||||
var_dump($rao=assert_options("F1","f1"));
|
||||
var_dump($rao=assert_options("F1", "f1"));
|
||||
|
||||
//Wrong number of parameters for assert()
|
||||
$sa="0 != 0";
|
||||
var_dump($r2=assert($sa,1));
|
||||
var_dump($r2 = assert($sa, "message", 1));
|
||||
|
||||
|
||||
//Catch recoverable error with handler
|
||||
var_dump($rc=assert('aa=sd+as+safsafasfaçsafçsafç'));
|
||||
var_dump($rc = assert('aa=sd+as+safsafasfaçsafçsafç'));
|
||||
--EXPECTF--
|
||||
Warning: assert_options() expects at most 2 parameters, 3 given in %s on line %d
|
||||
NULL
|
||||
@@ -40,5 +40,6 @@ NULL
|
||||
Warning: assert_options() expects parameter 1 to be long, string given in %s on line %d
|
||||
NULL
|
||||
|
||||
Warning: assert() expects exactly 1 parameter, 2 given in %s on line %d
|
||||
Warning: assert() expects at most 2 parameters, 3 given in %s on line %d
|
||||
NULL
|
||||
|
||||
|
||||
Reference in New Issue
Block a user