Re: cvs: php4 /ext/standard basic_functions.c php_var.h var.c
| From: | Jason Greene | Date: | Sun, 10 Feb 2002 17:29:00 +0000 |
| Subject: | Re: cvs: php4 /ext/standard basic_functions.c php_var.h var.c | ||
| References: | 1 | Groups: | php.cvs |
| Request: | Send a blank email to php-cvs+get-9339@lists.php.net to get a copy of this message | ||
On Sun, 2002-02-10 at 11:17, Andi Gutmans wrote:
> Do you mind if we call it debug_zval_dump()? (i.e. debug is the module).
> This is more consistent with the function naming conventions and allows us
> to add debug_* without polluting the name space too much.
>
> Andi
No problem, I will rename it immediately.
-Jason
> At 06:52 AM 2/10/2002 +0000, Jason Greene wrote:
> >jason Sun Feb 10 01:52:35 2002 EDT
> >
> > Modified files:
> > /php4/ext/standard basic_functions.c php_var.h var.c
> > Log:
> > @Added zval_debug_dump which works similar to var_dump yet displays extra
> > internal information such as refcounts, and the true type names (Jason)
> >
> >
> >Index: php4/ext/standard/basic_functions.c
> >diff -u php4/ext/standard/basic_functions.c:1.440
> >php4/ext/standard/basic_functions.c:1.441
> >--- php4/ext/standard/basic_functions.c:1.440 Fri Jan 25 10:43:58 2002
> >+++ php4/ext/standard/basic_functions.c Sun Feb 10 01:52:35 2002
> >@@ -17,7 +17,7 @@
> > +----------------------------------------------------------------------+
> > */
> >
> >-/* $Id: basic_functions.c,v 1.440 2002/01/25 15:43:58 derick Exp $ */
> >+/* $Id: basic_functions.c,v 1.441 2002/02/10 06:52:35 jason Exp $ */
> >
> > #include "php.h"
> > #include "php_main.h"
> >@@ -516,6 +516,7 @@
> >
> > PHP_FE(var_dump,
> > NULL)
> > PHP_FE(var_export,
> > NULL)
> >+ PHP_FE(zval_debug_dump,
> > NULL)
> > PHP_FE(print_r,
> > NULL)
> >
> > PHP_FE(register_shutdown_function,
> > NULL)
> >Index: php4/ext/standard/php_var.h
> >diff -u php4/ext/standard/php_var.h:1.17 php4/ext/standard/php_var.h:1.18
> >--- php4/ext/standard/php_var.h:1.17 Tue Dec 11 10:30:35 2001
> >+++ php4/ext/standard/php_var.h Sun Feb 10 01:52:35 2002
> >@@ -16,7 +16,7 @@
> > +----------------------------------------------------------------------+
> > */
> >
> >-/* $Id: php_var.h,v 1.17 2001/12/11 15:30:35 sebastian Exp $ */
> >+/* $Id: php_var.h,v 1.18 2002/02/10 06:52:35 jason Exp $ */
> >
> > #ifndef PHP_VAR_H
> > #define PHP_VAR_H
> >@@ -25,11 +25,13 @@
> >
> > PHP_FUNCTION(var_dump);
> > PHP_FUNCTION(var_export);
> >+PHP_FUNCTION(zval_debug_dump);
> > PHP_FUNCTION(serialize);
> > PHP_FUNCTION(unserialize);
> >
> > void php_var_dump(zval **struc, int level TSRMLS_DC);
> > void php_var_export(zval **struc, int level TSRMLS_DC);
> >+void php_zval_debug_dump(zval **struc, int level TSRMLS_DC);
> >
> > /* typdef HashTable php_serialize_data_t; */
> > #define php_serialize_data_t HashTable
> >Index: php4/ext/standard/var.c
> >diff -u php4/ext/standard/var.c:1.125 php4/ext/standard/var.c:1.126
> >--- php4/ext/standard/var.c:1.125 Sat Dec 15 09:55:18 2001
> >+++ php4/ext/standard/var.c Sun Feb 10 01:52:35 2002
> >@@ -36,6 +36,7 @@
> > #include "php_incomplete_class.h"
> >
> > #define COMMON ((*struc)->is_ref ? "&" : "")
> >+#define Z_REFCOUNT_PP(a) ((*a)->refcount)
> >
> > /* }}} */
> > /* {{{ php_var_dump */
> >@@ -112,6 +113,7 @@
> > /* }}} */
> >
> >
> >+
> > /* {{{ proto void var_dump(mixed var)
> > Dumps a string representation of variable to output */
> > PHP_FUNCTION(var_dump)
> >@@ -130,6 +132,102 @@
> >
> > for (i=0; i<argc; i++)
> > php_var_dump(args[i], 1 TSRMLS_CC);
> >+
> >+ efree(args);
> >+}
> >+/* }}} */
> >+
> >+/* {{{ zval_debug_dump */
> >+
> >+static int zval_array_element_dump(zval **zv, int num_args, va_list args,
> >zend_hash_key *hash_key)
> >+{
> >+ int level;
> >+ TSRMLS_FETCH();
> >+
> >+ level = va_arg(args, int);
> >+
> >+ if (hash_key->nKeyLength==0) { /* numeric key */
> >+ php_printf("%*c[%ld]=>\n", level + 1, ' ',
> >hash_key->h);
> >+ } else { /* string key */
> >+ php_printf("%*c[\"%s\"]=>\n", level + 1, '
> >',
> >hash_key->arKey);
> >+ }
> >+ php_zval_debug_dump(zv, level + 2 TSRMLS_CC);
> >+ return 0;
> >+}
> >+
> >+void php_zval_debug_dump(zval **struc, int level TSRMLS_DC)
> >+{
> >+ HashTable *myht;
> >+
> >+ if (level > 1) {
> >+ php_printf("%*c", level - 1, ' ');
> >+ }
> >+
> >+ switch (Z_TYPE_PP(struc)) {
> >+ case IS_BOOL:
> >+ php_printf("%sbool(%s) refcount(%u)\n", COMMON,
> >Z_LVAL_PP(struc)?"true":"false", Z_REFCOUNT_PP(struc));
> >+ break;
> >+ case IS_NULL:
> >+ php_printf("%sNULL refcount(%u)\n", COMMON,
> >Z_REFCOUNT_PP(struc));
> >+ break;
> >+ case IS_LONG:
> >+ php_printf("%slong(%ld) refcount(%u)\n", COMMON,
> >Z_LVAL_PP(struc), Z_REFCOUNT_PP(struc));
> >+ break;
> >+ case IS_DOUBLE:
> >+ php_printf("%sdouble(%.*G) refcount(%u)\n", COMMON, (int)
> >EG(precision), Z_DVAL_PP(struc), Z_REFCOUNT_PP(struc));
> >+ break;
> >+ case IS_STRING:
> >+ php_printf("%sstring(%d) \"", COMMON, Z_STRLEN_PP(struc));
> >+ PHPWRITE(Z_STRVAL_PP(struc), Z_STRLEN_PP(struc));
> >+ php_printf("\" refcount(%u)\n", Z_REFCOUNT_PP(struc));
> >+ break;
> >+ case IS_ARRAY:
> >+ myht = Z_ARRVAL_PP(struc);
> >+ php_printf("%sarray(%d) refcount(%u){\n", COMMON,
> >zend_hash_num_elements(myht), Z_REFCOUNT_PP(struc));
> >+ goto head_done;
> >+ case IS_OBJECT:
> >+ myht = Z_OBJPROP_PP(struc);
> >+ php_printf("%sobject(%s)(%d) refcount(%u){\n", COMMON,
> >Z_OBJCE_PP(struc)->name, zend_hash_num_elements(myht), Z_REFCOUNT_PP(struc));
> >+head_done:
> >+ zend_hash_apply_with_arguments(myht, (apply_func_args_t)
> >zval_array_element_dump, 1, level);
> >+ if (level > 1) {
> >+ php_printf("%*c", level-1, ' ');
> >+ }
> >+ PUTS("}\n");
> >+ break;
> >+ case IS_RESOURCE: {
> >+ char *type_name;
> >+
> >+ type_name = zend_rsrc_list_get_rsrc_type(Z_LVAL_PP(struc)
> >TSRMLS_CC);
> >+ php_printf("%sresource(%ld) of type (%s) refcount(%u)\n",
> >COMMON, Z_LVAL_PP(struc), type_name ? type_name : "Unknown",
> >Z_REFCOUNT_PP(struc));
> >+ break;
> >+ }
> >+ default:
> >+ php_printf("%sUNKNOWN:0\n", COMMON);
> >+ break;
> >+ }
> >+}
> >+
> >+/* }}} */
> >+
> >+/* {{{ proto void zval_debug_dump(mixed var)
> >+ Dumps a string representation of an internal zend value to output. */
> >+PHP_FUNCTION(zval_debug_dump)
> >+{
> >+ zval ***args;
> >+ int argc;
> >+ int i;
> >+
> >+ argc = ZEND_NUM_ARGS();
> >+
> >+ args = (zval ***)emalloc(argc * sizeof(zval **));
> >+ if (ZEND_NUM_ARGS() == 0 || zend_get_parameters_array_ex(argc,
> >args) == FAILURE) {
> >+ efree(args);
> >+ WRONG_PARAM_COUNT;
> >+ }
> >+
> >+ for (i=0; i<argc; i++)
> >+ php_zval_debug_dump(args[i], 1 TSRMLS_CC);
> >
> > efree(args);
> > }
> >
> >
> >
> >--
> >PHP CVS Mailing List (http://www.php.net/)
> >To unsubscribe, visit: http://www.php.net/unsub.php
>
>
> --
> PHP CVS Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
>