static zval *smd_get_zval_ptr_cv(zend_execute_data *execute_data, uint32_t var, int type, int force_ret) /* {{{ */ { zval *ret = EX_VAR(var); if (UNEXPECTED(Z_TYPE_P(ret) == IS_UNDEF)) { if (force_ret) { switch (type) { case BP_VAR_R: case BP_VAR_UNSET: zend_error(E_NOTICE, "Undefined variable: %s", ZSTR_VAL(CV_DEF_OF(EX_VAR_TO_NUM(var)))); case BP_VAR_IS: ret = &EG(uninitialized_zval); break; case BP_VAR_RW: zend_error(E_NOTICE, "Undefined variable: %s", ZSTR_VAL(CV_DEF_OF(EX_VAR_TO_NUM(var)))); case BP_VAR_W: ZVAL_NULL(ret); break; } } else { return NULL; } } else { ZVAL_DEREF(ret); } return ret; } /* }}} */
| obtain it through the world-wide-web, please send a note to | | [email protected] so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Felipe Pena <*****@*****.**> | +----------------------------------------------------------------------+ */ /* $Id$ */ #include "php.h" #include "php_pod.h" #include "php_pod_execute.h" zval **pod_get_zval_cv_lookup(zval ***ptr, zend_uint var, char **var_name TSRMLS_DC) { zend_compiled_variable *cv = &CV_DEF_OF(var); if (!EG(active_symbol_table) || zend_hash_quick_find(EG(active_symbol_table), cv->name, cv->name_len+1, cv->hash_value, (void **)ptr)==FAILURE) { if (!EG(active_symbol_table)) { *ptr = (zval**)EG(current_execute_data)->CVs + (EG(active_op_array)->last_var + var); **ptr = &EG(uninitialized_zval); } else { zend_hash_quick_update(EG(active_symbol_table), cv->name, cv->name_len+1, cv->hash_value, &EG(uninitialized_zval_ptr), sizeof(zval *), (void **)ptr); } if (EG(active_symbol_table)) { *var_name = cv->name; } } return *ptr; }