cvs: ZendEngine2 / zend_reflection_api.c
| From: | Marcus Boerger | Date: | Wed, 18 Aug 2004 23:07:12 +0000 |
| Subject: | cvs: ZendEngine2 / zend_reflection_api.c | ||
| Groups: | php.zend-engine.cvs | ||
| Request: | Send a blank email to php-zend-engine-cvs+get-2874@lists.php.net to get a copy of this message | ||
helly Wed Aug 18 19:07:12 2004 EDT
Modified files:
/ZendEngine2 zend_reflection_api.c
Log:
- Show default value of optional parameters of user defined functions.
http://cvs.php.net/diff.php/ZendEngine2/zend_reflection_api.c?r1=1.120&r2=1.121&ty=u
Index: ZendEngine2/zend_reflection_api.c
diff -u ZendEngine2/zend_reflection_api.c:1.120 ZendEngine2/zend_reflection_api.c:1.121
--- ZendEngine2/zend_reflection_api.c:1.120 Mon Aug 16 04:48:25 2004
+++ ZendEngine2/zend_reflection_api.c Wed Aug 18 19:07:12 2004
@@ -19,7 +19,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: zend_reflection_api.c,v 1.120 2004/08/16 08:48:25 helly Exp $ */
+/* $Id: zend_reflection_api.c,v 1.121 2004/08/18 23:07:12 helly Exp $ */
#include "zend.h"
#include "zend_API.h"
#include "zend_exceptions.h"
@@ -148,6 +148,7 @@
int offset;
int required;
struct _zend_arg_info *arg_info;
+ zend_function *fptr;
} parameter_reference;
/* Struct for reflection objects */
@@ -502,7 +503,7 @@
/* }}} */
/* {{{ _parameter_string */
-static void _parameter_string(string *str, struct _zend_arg_info *arg_info, int offset, int
required, char* indent TSRMLS_DC)
+static void _parameter_string(string *str, zend_function *fptr, struct _zend_arg_info *arg_info,
int offset, int required, char* indent TSRMLS_DC)
{
string_printf(str, "Parameter #%d [ ", offset);
if (offset >= required) {
@@ -524,6 +525,31 @@
} else {
string_printf(str, "$param%d", offset);
}
+ if (fptr->type == ZEND_USER_FUNCTION && offset >= required) {
+ zend_op *precv = &((zend_op_array*)fptr)->opcodes[offset*2 + 1];
+ if (precv->opcode == ZEND_RECV_INIT && precv->op2.op_type != IS_UNUSED) {
+ zval *zv, zv_copy;
+ int use_copy;
+ string_write(str, " = ", sizeof(" = ")-1);
+ zv = &precv->op2.u.constant;
+ zval_update_constant(&zv, (void*)1 TSRMLS_CC);
+ if (Z_TYPE_P(zv) == IS_NULL) {
+ string_write(str, "NULL", sizeof("NULL")-1);
+ } else if (Z_TYPE_P(zv) == IS_STRING) {
+ string_write(str, "'", sizeof("'")-1);
+ string_write(str, Z_STRVAL_P(zv), MIN(Z_STRLEN_P(zv), 15));
+ if (Z_STRLEN_P(zv) > 15) {
+ string_write(str, "...", sizeof("...")-1);
+ }
+ string_write(str, "'", sizeof("'")-1);
+ } else {
+ zend_make_printable_zval(zv, &zv_copy, &use_copy);
+ string_write(str, Z_STRVAL(zv_copy), Z_STRLEN(zv_copy));
+ zval_dtor(&zv_copy);
+ }
+ zval_ptr_dtor(&zv);
+ }
+ }
string_write(str, " ]", sizeof(" ]")-1);
}
/* }}} */
@@ -543,7 +569,7 @@
string_printf(str, "%s- Parameters [%d] {\n", indent, fptr->common.num_args);
for (i = 0; i < fptr->common.num_args; i++) {
string_printf(str, "%s ", indent);
- _parameter_string(str, arg_info, i, required, indent TSRMLS_CC);
+ _parameter_string(str, fptr, arg_info, i, required, indent TSRMLS_CC);
string_write(str, "\n", sizeof("\n")-1);
arg_info++;
}
@@ -833,7 +859,7 @@
/* }}} */
/* {{{ reflection_parameter_factory */
-static void reflection_parameter_factory(struct _zend_arg_info *arg_info, int offset, int required,
zval *object TSRMLS_DC)
+static void reflection_parameter_factory(zend_function *fptr, struct _zend_arg_info *arg_info, int
offset, int required, zval *object TSRMLS_DC)
{
reflection_object *intern;
parameter_reference *reference;
@@ -851,6 +877,7 @@
reference->arg_info = arg_info;
reference->offset = offset;
reference->required = required;
+ reference->fptr = fptr;
intern->ptr = reference;
intern->free_ptr = 1;
zend_hash_update(Z_OBJPROP_P(object), "name", sizeof("name"), (void **)
&name, sizeof(zval *), NULL);
@@ -1414,7 +1441,7 @@
zval *parameter;
ALLOC_ZVAL(parameter);
- reflection_parameter_factory(arg_info, i, fptr->common.required_num_args, parameter
TSRMLS_CC);
+ reflection_parameter_factory(fptr, arg_info, i, fptr->common.required_num_args, parameter
TSRMLS_CC);
add_next_index_zval(return_value, parameter);
arg_info++;
@@ -1551,6 +1578,7 @@
ref->arg_info = &arg_info[position];
ref->offset = position;
ref->required = fptr->common.required_num_args;
+ ref->fptr = fptr;
intern->ptr = ref;
intern->free_ptr = 1;
}
@@ -1567,7 +1595,7 @@
METHOD_NOTSTATIC_NUMPARAMS(0);
GET_REFLECTION_OBJECT_PTR(param);
string_init(&str);
- _parameter_string(&str, param->arg_info, param->offset, param->required, ""
TSRMLS_CC);
+ _parameter_string(&str, param->fptr, param->arg_info, param->offset,
param->required, "" TSRMLS_CC);
RETURN_STRINGL(str.string, str.len - 1, 0);
}
/* }}} */