Back to index

php5  5.3.10
Functions
zend_variables.c File Reference
#include <stdio.h>
#include "zend.h"
#include "zend_API.h"
#include "zend_globals.h"
#include "zend_constants.h"
#include "zend_list.h"

Go to the source code of this file.

Functions

ZEND_API void _zval_dtor_func (zval *zvalue ZEND_FILE_LINE_DC)
ZEND_API void _zval_internal_dtor (zval *zvalue ZEND_FILE_LINE_DC)
ZEND_API void zval_add_ref (zval **p)
ZEND_API void _zval_copy_ctor_func (zval *zvalue ZEND_FILE_LINE_DC)
ZEND_API int zend_print_variable (zval *var)
ZEND_API void _zval_dtor_wrapper (zval *zvalue)
ZEND_API void zval_property_ctor (zval **p)

Function Documentation

ZEND_API void _zval_copy_ctor_func ( zval *zvalue  ZEND_FILE_LINE_DC)

Definition at line 104 of file zend_variables.c.

{
       switch (Z_TYPE_P(zvalue) & IS_CONSTANT_TYPE_MASK) {
              case IS_RESOURCE: {
                            TSRMLS_FETCH();

                            zend_list_addref(zvalue->value.lval);
                     }
                     break;
              case IS_BOOL:
              case IS_LONG:
              case IS_NULL:
                     break;
              case IS_CONSTANT:
              case IS_STRING:
                     CHECK_ZVAL_STRING_REL(zvalue);
                     zvalue->value.str.val = (char *) estrndup_rel(zvalue->value.str.val, zvalue->value.str.len);
                     break;
              case IS_ARRAY:
              case IS_CONSTANT_ARRAY: {
                            zval *tmp;
                            HashTable *original_ht = zvalue->value.ht;
                            HashTable *tmp_ht = NULL;
                            TSRMLS_FETCH();

                            if (zvalue->value.ht == &EG(symbol_table)) {
                                   return; /* do nothing */
                            }
                            ALLOC_HASHTABLE_REL(tmp_ht);
                            zend_hash_init(tmp_ht, zend_hash_num_elements(original_ht), NULL, ZVAL_PTR_DTOR, 0);
                            zend_hash_copy(tmp_ht, original_ht, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *));
                            zvalue->value.ht = tmp_ht;
                     }
                     break;
              case IS_OBJECT:
                     {
                            TSRMLS_FETCH();
                            Z_OBJ_HT_P(zvalue)->add_ref(zvalue TSRMLS_CC);
                     }
                     break;
       }
}

Here is the call graph for this function:

Here is the caller graph for this function:

ZEND_API void _zval_dtor_func ( zval *zvalue  ZEND_FILE_LINE_DC)

Definition at line 30 of file zend_variables.c.

{
       switch (Z_TYPE_P(zvalue) & IS_CONSTANT_TYPE_MASK) {
              case IS_STRING:
              case IS_CONSTANT:
                     CHECK_ZVAL_STRING_REL(zvalue);
                     STR_FREE_REL(zvalue->value.str.val);
                     break;
              case IS_ARRAY:
              case IS_CONSTANT_ARRAY: {
                            TSRMLS_FETCH();

                            if (zvalue->value.ht && (zvalue->value.ht != &EG(symbol_table))) {
                                   zend_hash_destroy(zvalue->value.ht);
                                   FREE_HASHTABLE(zvalue->value.ht);
                            }
                     }
                     break;
              case IS_OBJECT:
                     {
                            TSRMLS_FETCH();

                            Z_OBJ_HT_P(zvalue)->del_ref(zvalue TSRMLS_CC);
                     }
                     break;
              case IS_RESOURCE:
                     {
                            TSRMLS_FETCH();

                            /* destroy resource */
                            zend_list_delete(zvalue->value.lval);
                     }
                     break;
              case IS_LONG:
              case IS_DOUBLE:
              case IS_BOOL:
              case IS_NULL:
              default:
                     return;
                     break;
       }
}

Here is the call graph for this function:

Here is the caller graph for this function:

ZEND_API void _zval_dtor_wrapper ( zval *  zvalue)

Definition at line 154 of file zend_variables.c.

ZEND_API void _zval_internal_dtor ( zval *zvalue  ZEND_FILE_LINE_DC)

Definition at line 74 of file zend_variables.c.

{
       switch (Z_TYPE_P(zvalue) & IS_CONSTANT_TYPE_MASK) {
              case IS_STRING:
              case IS_CONSTANT:
                     CHECK_ZVAL_STRING_REL(zvalue);
                     free(zvalue->value.str.val);
                     break;
              case IS_ARRAY:
              case IS_CONSTANT_ARRAY:
              case IS_OBJECT:
              case IS_RESOURCE:
                     zend_error(E_CORE_ERROR, "Internal zval's can't be arrays, objects or resources");
                     break;
              case IS_LONG:
              case IS_DOUBLE:
              case IS_BOOL:
              case IS_NULL:
              default:
                     break;
       }
}

Here is the call graph for this function:

ZEND_API int zend_print_variable ( zval *  var)

Definition at line 148 of file zend_variables.c.

{
       return zend_print_zval(var, 0);
}

Here is the call graph for this function:

Here is the caller graph for this function:

ZEND_API void zval_add_ref ( zval **  p)

Definition at line 98 of file zend_variables.c.

{
       Z_ADDREF_PP(p);
}
ZEND_API void zval_property_ctor ( zval **  p)

Definition at line 162 of file zend_variables.c.

{
       zval *orig_ptr = *p;

       ALLOC_ZVAL(*p);
       **p = *orig_ptr;
       zval_copy_ctor(*p);
       Z_SET_REFCOUNT_PP(p, 1);
       Z_UNSET_ISREF_PP(p);
}