示例#1
0
文件: zend.c 项目: AzerTyQsdF/osx
ZEND_API void zend_print_zval_r_ex(zend_write_func_t write_func, zval *expr, int indent) 
{
	switch(expr->type) {
		case IS_ARRAY:
			ZEND_PUTS_EX("Array\n");
			if (++expr->value.ht->nApplyCount>1) {
				ZEND_PUTS_EX(" *RECURSION*");
				expr->value.ht->nApplyCount--;
				return;
			}
			print_hash(write_func, expr->value.ht, indent);
			expr->value.ht->nApplyCount--;
			break;
		case IS_OBJECT:
			{
				zend_object *object = Z_OBJ_P(expr);

				if (++object->properties->nApplyCount>1) {
					ZEND_PUTS_EX(" *RECURSION*");
					object->properties->nApplyCount--;
					return;
				}
				zend_printf("%s Object\n", object->ce->name);
				print_hash(write_func, object->properties, indent);
				object->properties->nApplyCount--;
				break;
			}
		default:
			zend_print_zval_ex(write_func, expr, indent);
			break;
	}
}
示例#2
0
文件: zend.c 项目: LuthandoE/php-src
ZEND_API void zend_print_zval_r_ex(zend_write_func_t write_func, zval *expr, int indent) /* {{{ */
{
	ZVAL_DEREF(expr);
	switch (Z_TYPE_P(expr)) {
		case IS_ARRAY:
			ZEND_PUTS_EX("Array\n");
			if (ZEND_HASH_APPLY_PROTECTION(Z_ARRVAL_P(expr)) &&
			    ++Z_ARRVAL_P(expr)->u.v.nApplyCount>1) {
				ZEND_PUTS_EX(" *RECURSION*");
				Z_ARRVAL_P(expr)->u.v.nApplyCount--;
				return;
			}
			print_hash(write_func, Z_ARRVAL_P(expr), indent, 0);
			if (ZEND_HASH_APPLY_PROTECTION(Z_ARRVAL_P(expr))) {
				Z_ARRVAL_P(expr)->u.v.nApplyCount--;
			}
			break;
		case IS_OBJECT:
			{
				HashTable *properties;
				int is_temp;

				zend_string *class_name = Z_OBJ_HANDLER_P(expr, get_class_name)(Z_OBJ_P(expr));
				ZEND_PUTS_EX(ZSTR_VAL(class_name));
				zend_string_release(class_name);

				ZEND_PUTS_EX(" Object\n");
				if (Z_OBJ_APPLY_COUNT_P(expr) > 0) {
					ZEND_PUTS_EX(" *RECURSION*");
					return;
				}
				if ((properties = Z_OBJDEBUG_P(expr, is_temp)) == NULL) {
					break;
				}

				Z_OBJ_INC_APPLY_COUNT_P(expr);
				print_hash(write_func, properties, indent, 1);
				Z_OBJ_DEC_APPLY_COUNT_P(expr);

				if (is_temp) {
					zend_hash_destroy(properties);
					FREE_HASHTABLE(properties);
				}
				break;
			}
		default:
			zend_print_zval_ex(write_func, expr, indent);
			break;
	}
}
示例#3
0
文件: zend.c 项目: LuthandoE/php-src
ZEND_API size_t zend_print_zval(zval *expr, int indent) /* {{{ */
{
	return zend_print_zval_ex(zend_write, expr, indent);
}
示例#4
0
文件: zend.c 项目: AzerTyQsdF/osx
ZEND_API int zend_print_zval(zval *expr, int indent)
{
	return zend_print_zval_ex(zend_write, expr, indent);
}