cvs: /php4 php.ini-dist /php4/ext/standard assert.c

From: Date: Tue, 07 Dec 1999 16:46:16 +0000
Subject: cvs: /php4 php.ini-dist /php4/ext/standard assert.c
Groups: php.version4 
Request: Send a blank email to php-version4+get-7619@lists.php.net to get a copy of this message
thies Tue Dec 7 11:46:16 1999 EDT Modified files: /php4 php.ini-dist /php4/ext/standard assert.c Log: added assert.quiet_eval plus a bit of cleaning (docs to follow!) Index: php4/php.ini-dist diff -u php4/php.ini-dist:1.13 php4/php.ini-dist:1.14 --- php4/php.ini-dist:1.13 Tue Dec 7 08:08:17 1999 +++ php4/php.ini-dist Tue Dec 7 11:45:45 1999 @@ -304,8 +304,9 @@ mssql.compatability_mode = Off ; compatability mode with old versions of PHP 3.0. [Assertion] -assert.active = Off ; assert(expr); does nothing by default -assert.warning = On ; assert() will issue a PHP warning for each failed assertion. -assert.bail = Off ; assert() will not bail out by default. -assert.callback = 0 ; assert() will not call any user-defined PHP-Code by default. +;assert.active = Off ; assert(expr); does nothing by default +;assert.warning = On ; issue a PHP warning for each failed assertion. +;assert.bail = Off ; don't bail out by default. +;assert.callback = 0 ; user-function to be called if an assertion fails. +;assert.quiet_eval = 0 ; eval the expression with current error_reporting(). set to true if you want error_reporting(0) around the eval(). Index: php4/ext/standard/assert.c diff -u php4/ext/standard/assert.c:1.5 php4/ext/standard/assert.c:1.6 --- php4/ext/standard/assert.c:1.5 Tue Dec 7 11:28:27 1999 +++ php4/ext/standard/assert.c Tue Dec 7 11:45:46 1999 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: assert.c,v 1.5 1999/12/07 16:28:27 rubys Exp $ */ +/* $Id: assert.c,v 1.6 1999/12/07 16:45:46 thies Exp $ */ /* {{{ includes/startup/misc */ @@ -28,6 +28,8 @@ int active; int bail; int warning; + int quiet_eval; + char *default_callback; char *callback; } php_assert_globals; @@ -74,12 +76,14 @@ #define ASSERT_CALLBACK 2 #define ASSERT_BAIL 3 #define ASSERT_WARNING 4 +#define ASSERT_QUIET_EVAL 5 PHP_INI_BEGIN() - STD_PHP_INI_BOOLEAN("assert.active", "0", PHP_INI_ALL, OnUpdateInt, active, php_assert_globals, assert_globals) - STD_PHP_INI_BOOLEAN("assert.bail", "0", PHP_INI_ALL, OnUpdateInt, bail, php_assert_globals, assert_globals) - STD_PHP_INI_BOOLEAN("assert.warning", "1", PHP_INI_ALL, OnUpdateInt, warning, php_assert_globals, assert_globals) - PHP_INI_ENTRY("assert.callback", NULL, PHP_INI_ALL, NULL) + STD_PHP_INI_ENTRY("assert.active", "0", PHP_INI_ALL, OnUpdateInt, active, php_assert_globals, assert_globals) + STD_PHP_INI_ENTRY("assert.bail", "0", PHP_INI_ALL, OnUpdateInt, bail, php_assert_globals, assert_globals) + STD_PHP_INI_ENTRY("assert.warning", "1", PHP_INI_ALL, OnUpdateInt, warning, php_assert_globals, assert_globals) + STD_PHP_INI_ENTRY("assert.callback", NULL, PHP_INI_ALL, OnUpdateString, default_callback, php_assert_globals, assert_globals) + STD_PHP_INI_ENTRY("assert.quiet_eval", "0", PHP_INI_ALL, OnUpdateInt, quiet_eval, php_assert_globals, assert_globals) PHP_INI_END() static void php_assert_init_globals(php_assert_globals *assert_globals) @@ -100,6 +104,7 @@ REGISTER_LONG_CONSTANT("ASSERT_CALLBACK", ASSERT_CALLBACK, CONST_CS|CONST_PERSISTENT); REGISTER_LONG_CONSTANT("ASSERT_BAIL", ASSERT_BAIL, CONST_CS|CONST_PERSISTENT); REGISTER_LONG_CONSTANT("ASSERT_WARNING", ASSERT_WARNING, CONST_CS|CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("ASSERT_QUIET_EVAL", ASSERT_QUIET_EVAL, CONST_CS|CONST_PERSISTENT); return SUCCESS; } @@ -111,15 +116,10 @@ PHP_RINIT_FUNCTION(assert) { - char *cbstr; - ASSERTLS_FETCH(); - - cbstr = INI_STR("assert.callback"); - if (cbstr) { - ASSERT(callback) = estrdup(cbstr); - } else { + if (ASSERT(callback)) { + efree(ASSERT(callback)); ASSERT(callback) = NULL; } @@ -130,7 +130,10 @@ { ASSERTLS_FETCH(); - if (ASSERT(callback)) efree(ASSERT(callback)); + if (ASSERT(callback)) { + efree(ASSERT(callback)); + ASSERT(callback) = NULL; + } return SUCCESS; } @@ -145,7 +148,7 @@ /* }}} */ /* {{{ internal functions */ /* }}} */ -/* {{{ proto int assert(string|int assertion) +/* {{{ proto int assert(string|bool assertion) checks if assertion is false */ PHP_FUNCTION(assert) @@ -153,6 +156,7 @@ pval **assertion; int val; char *myeval = NULL; + char *cbfunc; CLS_FETCH(); ELS_FETCH(); ASSERTLS_FETCH(); @@ -167,9 +171,21 @@ if ((*assertion)->type == IS_STRING) { zval retval; + int old_error_reporting; myeval = (*assertion)->value.str.val; + + if (ASSERT(quiet_eval)) { + old_error_reporting = EG(error_reporting); + EG(error_reporting) = 0; + } + zend_eval_string(myeval, &retval CLS_CC ELS_CC); + + if (ASSERT(quiet_eval)) { + EG(error_reporting) = old_error_reporting; + } + convert_to_boolean(&retval); val = retval.value.lval; } else { @@ -182,6 +198,14 @@ } if (ASSERT(callback)) { + cbfunc = ASSERT(callback); + } else if (ASSERT(default_callback)) { + cbfunc = ASSERT(default_callback); + } else { + cbfunc = NULL; + } + + if (cbfunc) { zval *args[5]; zval *retval; int i; @@ -199,10 +223,10 @@ MAKE_STD_ZVAL(args[4]); */ - args[0]->type = IS_STRING; args[0]->value.str.val = estrdup(SAFE_STRING(ASSERT(callback))); args[0]->value.str.len = strlen(args[0]->value.str.val); - args[1]->type = IS_STRING; args[1]->value.str.val = estrdup(SAFE_STRING(filename)); args[1]->value.str.len = strlen(args[1]->value.str.val); + args[0]->type = IS_STRING; args[0]->value.str.val = estrdup(SAFE_STRING(cbfunc)); args[0]->value.str.len = strlen(args[0]->value.str.val); + args[1]->type = IS_STRING; args[1]->value.str.val = estrdup(SAFE_STRING(filename)); args[1]->value.str.len = strlen(args[1]->value.str.val); args[2]->type = IS_LONG; args[2]->value.lval = lineno; - args[3]->type = IS_STRING; args[3]->value.str.val = estrdup(SAFE_STRING(myeval)); args[3]->value.str.len = strlen(args[3]->value.str.val); + args[3]->type = IS_STRING; args[3]->value.str.val = estrdup(SAFE_STRING(myeval)); args[3]->value.str.len = strlen(args[3]->value.str.val); /* this is always "assert" so it's useless args[4]->type = IS_STRING; args[4]->value.str.val = estrdup(SAFE_STRING(function)); args[4]->value.str.len = strlen(args[4]->value.str.val); @@ -212,6 +236,7 @@ retval->type = IS_BOOL; retval->value.lval = 0; + /* XXX do we want to check for error here? */ call_user_function(CG(function_table), NULL, args[0], retval, 3, args+1); for (i = 0; i < 4; i++) { @@ -266,6 +291,15 @@ if (ac == 2) { convert_to_long_ex(value); ASSERT(bail) = (*value)->value.lval; + } + RETURN_LONG(oldint); + break; + + case ASSERT_QUIET_EVAL: + oldint = ASSERT(quiet_eval); + if (ac == 2) { + convert_to_long_ex(value); + ASSERT(quiet_eval) = (*value)->value.lval; } RETURN_LONG(oldint); break;

« previous php.version4 (#7619) next »