@ -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_le n ) = = 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
*/