ZEND_API void zend_rebuild_symbol_table(TSRMLS_D);
ZEND_API void zend_attach_symbol_table(TSRMLS_D);
ZEND_API void zend_detach_symbol_table(TSRMLS_D);
-ZEND_API int zend_set_local_var(const char *name, int len, zval *value, int force TSRMLS_DC);
+ZEND_API int zend_set_local_var(zend_string *name, zval *value, int force TSRMLS_DC);
+ZEND_API int zend_set_local_var_str(const char *name, int len, zval *value, int force TSRMLS_DC);
ZEND_API zend_string *zend_find_alias_name(zend_class_entry *ce, zend_string *name);
ZEND_API zend_string *zend_resolve_method_name(zend_class_entry *ce, zend_function *f);
}
ZVAL_DUP(&const_val, &constant->value);
- add_assoc_zval_ex(name_array, constant->name->val, constant->name->len, &const_val);
+ zend_hash_update(Z_ARRVAL_P(name_array), constant->name, &const_val);
return 0;
}
ZVAL_DUP_DEREF(&const_val, &val->value);
- add_assoc_zval_ex(&modules[module_number], val->name->val, val->name->len, &const_val);
+ zend_hash_update(Z_ARRVAL(modules[module_number]), val->name, &const_val);
next_constant:
zend_hash_move_forward_ex(EG(zend_constants), &pos);
}
}
/* }}} */
-ZEND_API int zend_set_local_var(const char *name, int len, zval *value, int force TSRMLS_DC) /* {{{ */
+ZEND_API int zend_set_local_var(zend_string *name, zval *value, int force TSRMLS_DC) /* {{{ */
+{
+ if (!EG(active_symbol_table)) {
+ int i;
+ zend_execute_data *execute_data = EG(current_execute_data);
+ zend_op_array *op_array = execute_data->op_array;
+ zend_ulong h = STR_HASH_VAL(name);
+
+ if (op_array) {
+ for (i = 0; i < op_array->last_var; i++) {
+ if (op_array->vars[i]->h == h &&
+ op_array->vars[i]->len == name->len &&
+ memcmp(op_array->vars[i]->val, name->val, name->len) == 0) {
+ ZVAL_COPY_VALUE(EX_VAR_NUM(i), value);
+ return SUCCESS;
+ }
+ }
+ }
+ if (force) {
+ zend_rebuild_symbol_table(TSRMLS_C);
+ if (EG(active_symbol_table)) {
+ zend_hash_update(&EG(active_symbol_table)->ht, name, value);
+ }
+ } else {
+ return FAILURE;
+ }
+ } else {
+ return (zend_hash_update_ind(&EG(active_symbol_table)->ht, name, value) != NULL) ? SUCCESS : FAILURE;
+ }
+ return SUCCESS;
+}
+/* }}} */
+
+ZEND_API int zend_set_local_var_str(const char *name, int len, zval *value, int force TSRMLS_DC) /* {{{ */
{
if (!EG(active_symbol_table)) {
int i;
zval_update_constant(&prop_copy, (void *) 1 TSRMLS_CC);
}
-//??? add_assoc_zval(return_value, key, &prop_copy);
- add_assoc_zval(return_value, key->val, &prop_copy);
+ zend_hash_update(Z_ARRVAL_P(return_value), key, &prop_copy);
}
}
/* }}} */
for (i=0; i < ce->num_interfaces; i++) {
zval interface;
zend_reflection_class_factory(ce->interfaces[i], &interface TSRMLS_CC);
-//???
- add_assoc_zval_ex(return_value, ce->interfaces[i]->name->val, ce->interfaces[i]->name->len, &interface);
+ zend_hash_update(Z_ARRVAL_P(return_value), ce->interfaces[i]->name, &interface);
}
}
}
for (i=0; i < ce->num_traits; i++) {
zval trait;
zend_reflection_class_factory(ce->traits[i], &trait TSRMLS_CC);
-//???
- add_assoc_zval_ex(return_value, ce->traits[i]->name->val, ce->traits[i]->name->len, &trait);
+ zend_hash_update(Z_ARRVAL_P(return_value), ce->traits[i]->name, &trait);
}
}
/* }}} */
if (fptr->common.type==ZEND_INTERNAL_FUNCTION
&& fptr->internal_function.module == module) {
reflection_function_factory(fptr, NULL, &function TSRMLS_CC);
-//???
- add_assoc_zval(return_value, fptr->common.function_name->val, &function);
+ zend_hash_update(Z_ARRVAL_P(return_value), fptr->common.function_name, &function);
}
zend_hash_move_forward_ex(CG(function_table), &iterator);
}
if (number == constant->module_number) {
ZVAL_DUP(&const_val, &constant->value);
-//??? INIT_PZVAL(const_val);
-
- add_assoc_zval_ex(retval, constant->name->val, constant->name->len, &const_val);
+ zend_hash_update(Z_ARRVAL_P(retval), constant->name, &const_val);
}
return 0;
}
/* }}} */
/* {{{ add_extension_class */
-static int add_extension_class(zend_class_entry **pce TSRMLS_DC, int num_args, va_list args, zend_hash_key *hash_key)
+static int add_extension_class(zval *zv TSRMLS_DC, int num_args, va_list args, zend_hash_key *hash_key)
{
+ zend_class_entry *ce = Z_PTR_P(zv);
zval *class_array = va_arg(args, zval*), zclass;
struct _zend_module_entry *module = va_arg(args, struct _zend_module_entry*);
int add_reflection_class = va_arg(args, int);
- if (((*pce)->type == ZEND_INTERNAL_CLASS) && (*pce)->info.internal.module && !strcasecmp((*pce)->info.internal.module->name, module->name)) {
+ if ((ce->type == ZEND_INTERNAL_CLASS) && ce->info.internal.module && !strcasecmp(ce->info.internal.module->name, module->name)) {
if (add_reflection_class) {
- zend_reflection_class_factory(*pce, &zclass TSRMLS_CC);
-//???
- add_assoc_zval_ex(class_array, (*pce)->name->val, (*pce)->name->len, &zclass);
+ zend_reflection_class_factory(ce, &zclass TSRMLS_CC);
+ zend_hash_update(Z_ARRVAL_P(class_array), ce->name, &zclass);
} else {
- add_next_index_str(class_array, STR_COPY((*pce)->name));
+ add_next_index_str(class_array, STR_COPY(ce->name));
}
}
return ZEND_HASH_APPLY_KEEP;
add_index_zval(return_value, Z_LVAL(element->inf), &retval);
break;
case IS_STRING:
- add_assoc_zval_ex(return_value, Z_STRVAL(element->inf), Z_STRLEN(element->inf), &retval);
+ zend_hash_update(Z_ARRVAL_P(return_value), Z_STR(element->inf), &retval);
break;
default:
zval_ptr_dtor(&retval);
}
} else {
ZVAL_DUP(&data, entry);
- zend_set_local_var(Z_STRVAL(final_name), Z_STRLEN(final_name), &data, 1 TSRMLS_CC);
+ zend_set_local_var(Z_STR(final_name), &data, 1 TSRMLS_CC);
}
count++;
}
Z_ADDREF_P(zcolval);
}
if (zkeyval && Z_TYPE_P(zkeyval) == IS_STRING) {
- add_assoc_zval(return_value, Z_STRVAL_P(zkeyval), zcolval);
+ zend_symtable_update(Z_ARRVAL_P(return_value), Z_STR_P(zkeyval), zcolval);
} else if (zkeyval && Z_TYPE_P(zkeyval) == IS_LONG) {
add_index_zval(return_value, Z_LVAL_P(zkeyval), zcolval);
} else if (zkeyval && Z_TYPE_P(zkeyval) == IS_OBJECT) {
SEPARATE_ZVAL(zkeyval);
convert_to_string(zkeyval);
- add_assoc_zval(return_value, Z_STRVAL_P(zkeyval), zcolval);
+ zend_symtable_update(Z_ARRVAL_P(return_value), Z_STR_P(zkeyval), zcolval);
} else {
add_next_index_zval(return_value, zcolval);
}
add_next_index_zval(return_value, &result);
} else {
if (key_type == HASH_KEY_IS_STRING) {
-//???
- add_assoc_zval_ex(return_value, str_key->val, str_key->len, &result);
+ zend_hash_update(Z_ARRVAL_P(return_value), str_key, &result);
} else {
add_index_zval(return_value, num_key, &result);
}
key_type = zend_hash_get_current_key_ex(Z_ARRVAL_P(input), &str_key, &num_key, 0, &pos);
switch (key_type) {
case HASH_KEY_IS_STRING:
-//???
- add_assoc_zval_ex(&chunk, str_key->val, str_key->len, entry);
+ zend_hash_update(Z_ARRVAL(chunk), str_key, entry);
break;
default:
add_index_zval(&chunk, num_key, entry);
}
zval_add_ref(entry_values);
-//???
- add_assoc_zval_ex(return_value, Z_STRVAL_P(key_ptr), Z_STRLEN_P(key_ptr), entry_values);
+ zend_symtable_update(Z_ARRVAL_P(return_value), Z_STR_P(key_ptr), entry_values);
if (key_ptr != entry_keys) {
zval_dtor(&key);
} else if (Z_TYPE_P(entry) == IS_ARRAY) {
array_init(&tmp);
zend_hash_apply_with_arguments(Z_ARRVAL_P(entry) TSRMLS_CC, (apply_func_args_t) add_config_entry_cb, 1, tmp);
- add_assoc_zval_ex(retval, hash_key->key->val, hash_key->key->len, &tmp);
+ zend_hash_update(Z_ARRVAL_P(retval), hash_key->key, &tmp);
}
return 0;
}
ZVAL_DUP(&element, arg2);
if (arg3 && Z_STRLEN_P(arg3) > 0) {
-//???
- add_assoc_zval_ex(find_hash, Z_STRVAL_P(arg3), Z_STRLEN_P(arg3), &element);
+ zend_symtable_update(Z_ARRVAL_P(find_hash), Z_STR_P(arg3), &element);
} else {
add_next_index_zval(find_hash, &element);
}
if (header_init) {
zval ztmp;
array_init(&ztmp);
- zend_set_local_var("http_response_header", sizeof("http_response_header")-1, &ztmp, 0 TSRMLS_CC);
+ zend_set_local_var_str("http_response_header", sizeof("http_response_header")-1, &ztmp, 0 TSRMLS_CC);
}
response_header = zend_hash_str_find(&EG(active_symbol_table)->ht, "http_response_header", sizeof("http_response_header")-1);
zend_hash_internal_pointer_reset_ex(stream_xport_hash, &pos);
while (zend_hash_get_current_key_ex(stream_xport_hash,
&stream_xport, &num_key, 0, &pos) == HASH_KEY_IS_STRING) {
-//???
- add_next_index_stringl(return_value, stream_xport->val, stream_xport->len, 1);
+ add_next_index_str(return_value, STR_COPY(stream_xport));
zend_hash_move_forward_ex(stream_xport_hash, &pos);
}
} else {
(key_flags = zend_hash_get_current_key_ex(url_stream_wrappers_hash, &stream_protocol, &num_key, 0, &pos)) != HASH_KEY_NON_EXISTENT;
zend_hash_move_forward_ex(url_stream_wrappers_hash, &pos)) {
if (key_flags == HASH_KEY_IS_STRING) {
-//???
- add_next_index_stringl(return_value, stream_protocol->val, stream_protocol->len, 1);
+ add_next_index_str(return_value, STR_COPY(stream_protocol));
}
}
} else {
switch (zend_hash_get_current_key_ex(Z_ARRVAL_P(subject), &string_key,
&num_key, 0, NULL)) {
case HASH_KEY_IS_STRING:
-//???
- add_assoc_zval_ex(return_value, string_key->val, string_key->len, &result);
+ zend_hash_update(Z_ARRVAL_P(return_value), string_key, &result);
break;
case HASH_KEY_IS_LONG:
(Z_TYPE(EG(user_error_handler)) == IS_UNDEF || !(EG(user_error_handler_error_reporting) & type))) {
zval tmp;
ZVAL_STRINGL(&tmp, buffer, buffer_len);
- if (zend_set_local_var("php_errormsg", sizeof("php_errormsg")-1, &tmp, 0 TSRMLS_CC) == FAILURE) {
+ if (zend_set_local_var_str("php_errormsg", sizeof("php_errormsg")-1, &tmp, 0 TSRMLS_CC) == FAILURE) {
zval_ptr_dtor(&tmp);
}
}
if (EG(active_symbol_table)) {
zval tmp;
ZVAL_STRINGL(&tmp, buffer, buffer_len);
- if (zend_set_local_var("php_errormsg", sizeof("php_errormsg")-1, &tmp, 0 TSRMLS_CC) == FAILURE) {
+ if (zend_set_local_var_str("php_errormsg", sizeof("php_errormsg")-1, &tmp, 0 TSRMLS_CC) == FAILURE) {
zval_ptr_dtor(&tmp);
}
}