diff options
Diffstat (limited to 'Zend/zend_builtin_functions.c')
-rw-r--r-- | Zend/zend_builtin_functions.c | 75 |
1 files changed, 42 insertions, 33 deletions
diff --git a/Zend/zend_builtin_functions.c b/Zend/zend_builtin_functions.c index 0af280b97e..04827cfb67 100644 --- a/Zend/zend_builtin_functions.c +++ b/Zend/zend_builtin_functions.c @@ -736,7 +736,7 @@ ZEND_FUNCTION(each) if (Z_REFCOUNTED_P(entry)) Z_ADDREF_P(entry); } zend_hash_index_add_new(Z_ARRVAL_P(return_value), 1, entry); - zend_hash_str_add_new(Z_ARRVAL_P(return_value), "value", sizeof("value")-1, entry); + zend_hash_add_new(Z_ARRVAL_P(return_value), CG(known_strings)[ZEND_STR_VALUE], entry); /* add the key elements */ if (zend_hash_get_current_key(target_hash, &key, &num_key) == HASH_KEY_IS_STRING) { @@ -746,7 +746,7 @@ ZEND_FUNCTION(each) ZVAL_LONG(&tmp, num_key); } zend_hash_index_add_new(Z_ARRVAL_P(return_value), 0, &tmp); - zend_hash_str_add_new(Z_ARRVAL_P(return_value), "key", sizeof("key")-1, &tmp); + zend_hash_add_new(Z_ARRVAL_P(return_value), CG(known_strings)[ZEND_STR_KEY], &tmp); zend_hash_move_forward(target_hash); } /* }}} */ @@ -776,7 +776,7 @@ ZEND_FUNCTION(error_reporting) zend_ini_entry *p = EG(error_reporting_ini_entry); if (!p) { - p = zend_hash_str_find_ptr(EG(ini_directives), "error_reporting", sizeof("error_reporting")-1); + p = zend_hash_find_ptr(EG(ini_directives), CG(known_strings)[ZEND_STR_ERROR_REPORTING]); if (p) { EG(error_reporting_ini_entry) = p; } else { @@ -788,7 +788,7 @@ ZEND_FUNCTION(error_reporting) ALLOC_HASHTABLE(EG(modified_ini_directives)); zend_hash_init(EG(modified_ini_directives), 8, NULL, NULL, 0); } - if (EXPECTED(zend_hash_str_add_ptr(EG(modified_ini_directives), "error_reporting", sizeof("error_reporting")-1, p) != NULL)) { + if (EXPECTED(zend_hash_add_ptr(EG(modified_ini_directives), CG(known_strings)[ZEND_STR_ERROR_REPORTING], p) != NULL)) { p->orig_value = p->value; p->orig_modifiable = p->modifiable; p->modified = 1; @@ -2570,7 +2570,7 @@ ZEND_API void zend_fetch_debug_backtrace(zval *return_value, int skip_last, int zend_string *function_name; zend_string *filename; zend_string *include_filename = NULL; - zval stack_frame; + zval stack_frame, tmp; array_init(return_value); @@ -2632,8 +2632,10 @@ ZEND_API void zend_fetch_debug_backtrace(zval *return_value, int skip_last, int } else { lineno = skip->opline->lineno; } - add_assoc_str_ex(&stack_frame, "file", sizeof("file")-1, zend_string_copy(filename)); - add_assoc_long_ex(&stack_frame, "line", sizeof("line")-1, lineno); + ZVAL_STR_COPY(&tmp, filename); + zend_hash_add_new(Z_ARRVAL(stack_frame), CG(known_strings)[ZEND_STR_FILE], &tmp); + ZVAL_LONG(&tmp, lineno); + zend_hash_add_new(Z_ARRVAL(stack_frame), CG(known_strings)[ZEND_STR_LINE], &tmp); /* try to fetch args only if an FCALL was just made - elsewise we're in the middle of a function * and debug_baktrace() might have been called by the error_handler. in this case we don't @@ -2650,8 +2652,10 @@ ZEND_API void zend_fetch_debug_backtrace(zval *return_value, int skip_last, int break; } if (prev->func && ZEND_USER_CODE(prev->func->common.type)) { - add_assoc_str_ex(&stack_frame, "file", sizeof("file")-1, zend_string_copy(prev->func->op_array.filename)); - add_assoc_long_ex(&stack_frame, "line", sizeof("line")-1, prev->opline->lineno); + ZVAL_STR_COPY(&tmp, prev->func->op_array.filename); + zend_hash_add_new(Z_ARRVAL(stack_frame), CG(known_strings)[ZEND_STR_FILE], &tmp); + ZVAL_LONG(&tmp, prev->opline->lineno); + zend_hash_add_new(Z_ARRVAL(stack_frame), CG(known_strings)[ZEND_STR_LINE], &tmp); break; } prev_call = prev; @@ -2676,66 +2680,69 @@ ZEND_API void zend_fetch_debug_backtrace(zval *return_value, int skip_last, int } if (function_name) { - add_assoc_str_ex(&stack_frame, "function", sizeof("function")-1, zend_string_copy(function_name)); + ZVAL_STR_COPY(&tmp, function_name); + zend_hash_add_new(Z_ARRVAL(stack_frame), CG(known_strings)[ZEND_STR_FUNCTION], &tmp); if (object) { if (func->common.scope) { - add_assoc_str_ex(&stack_frame, "class", sizeof("class")-1, zend_string_copy(func->common.scope->name)); + ZVAL_STR_COPY(&tmp, func->common.scope->name); } else { - add_assoc_str_ex(&stack_frame, "class", sizeof("class")-1, zend_string_copy(object->ce->name)); + ZVAL_STR_COPY(&tmp, object->ce->name); } + zend_hash_add_new(Z_ARRVAL(stack_frame), CG(known_strings)[ZEND_STR_CLASS], &tmp); if ((options & DEBUG_BACKTRACE_PROVIDE_OBJECT) != 0) { - zval zv; - ZVAL_OBJ(&zv, object); - add_assoc_zval_ex(&stack_frame, "object", sizeof("object")-1, &zv); - Z_ADDREF(zv); + ZVAL_OBJ(&tmp, object); + zend_hash_add_new(Z_ARRVAL(stack_frame), CG(known_strings)[ZEND_STR_OBJECT], &tmp); + Z_ADDREF(tmp); } - add_assoc_string_ex(&stack_frame, "type", sizeof("type")-1, "->"); + ZVAL_INTERNED_STR(&tmp, CG(known_strings)[ZEND_STR_OBJECT_OPERATOR]); + zend_hash_add_new(Z_ARRVAL(stack_frame), CG(known_strings)[ZEND_STR_TYPE], &tmp); } else if (func->common.scope) { - add_assoc_str_ex(&stack_frame, "class", sizeof("class")-1, zend_string_copy(func->common.scope->name)); - add_assoc_string_ex(&stack_frame, "type", sizeof("type")-1, "::"); + ZVAL_STR_COPY(&tmp, func->common.scope->name); + zend_hash_add_new(Z_ARRVAL(stack_frame), CG(known_strings)[ZEND_STR_CLASS], &tmp); + ZVAL_INTERNED_STR(&tmp, CG(known_strings)[ZEND_STR_PAAMAYIM_NEKUDOTAYIM]); + zend_hash_add_new(Z_ARRVAL(stack_frame), CG(known_strings)[ZEND_STR_TYPE], &tmp); } if ((options & DEBUG_BACKTRACE_IGNORE_ARGS) == 0 && func->type != ZEND_EVAL_CODE) { - zval args; - debug_backtrace_get_args(call, &args); - add_assoc_zval_ex(&stack_frame, "args", sizeof("args")-1, &args); + debug_backtrace_get_args(call, &tmp); + zend_hash_add_new(Z_ARRVAL(stack_frame), CG(known_strings)[ZEND_STR_ARGS], &tmp); } } else { /* i know this is kinda ugly, but i'm trying to avoid extra cycles in the main execution loop */ zend_bool build_filename_arg = 1; - const char *pseudo_function_name; + zend_string *pseudo_function_name; if (!ptr->func || !ZEND_USER_CODE(ptr->func->common.type) || ptr->opline->opcode != ZEND_INCLUDE_OR_EVAL) { /* can happen when calling eval from a custom sapi */ - pseudo_function_name = "unknown"; + pseudo_function_name = CG(known_strings)[ZEND_STR_UNKNOWN]; build_filename_arg = 0; } else switch (ptr->opline->extended_value) { case ZEND_EVAL: - pseudo_function_name = "eval"; + pseudo_function_name = CG(known_strings)[ZEND_STR_EVAL]; build_filename_arg = 0; break; case ZEND_INCLUDE: - pseudo_function_name = "include"; + pseudo_function_name = CG(known_strings)[ZEND_STR_INCLUDE]; break; case ZEND_REQUIRE: - pseudo_function_name = "require"; + pseudo_function_name = CG(known_strings)[ZEND_STR_REQUIRE]; break; case ZEND_INCLUDE_ONCE: - pseudo_function_name = "include_once"; + pseudo_function_name = CG(known_strings)[ZEND_STR_INCLUDE_ONCE]; break; case ZEND_REQUIRE_ONCE: - pseudo_function_name = "require_once"; + pseudo_function_name = CG(known_strings)[ZEND_STR_REQUIRE_ONCE]; break; default: /* this can actually happen if you use debug_backtrace() in your error_handler and * you're in the top-scope */ - pseudo_function_name = "unknown"; + pseudo_function_name = CG(known_strings)[ZEND_STR_UNKNOWN]; build_filename_arg = 0; break; } @@ -2749,11 +2756,13 @@ ZEND_API void zend_fetch_debug_backtrace(zval *return_value, int skip_last, int if we have called include in the frame above - this is the file we have included. */ - add_next_index_str(&arg_array, zend_string_copy(include_filename)); - add_assoc_zval_ex(&stack_frame, "args", sizeof("args")-1, &arg_array); + ZVAL_STR_COPY(&tmp, include_filename); + zend_hash_next_index_insert_new(Z_ARRVAL(arg_array), &tmp); + zend_hash_add_new(Z_ARRVAL(stack_frame), CG(known_strings)[ZEND_STR_ARGS], &arg_array); } - add_assoc_string_ex(&stack_frame, "function", sizeof("function")-1, (char *) pseudo_function_name); + ZVAL_INTERNED_STR(&tmp, pseudo_function_name); + zend_hash_add_new(Z_ARRVAL(stack_frame), CG(known_strings)[ZEND_STR_FUNCTION], &tmp); } zend_hash_next_index_insert_new(Z_ARRVAL_P(return_value), &stack_frame); |