summaryrefslogtreecommitdiff
path: root/ext/opcache/Optimizer/optimize_func_calls.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/opcache/Optimizer/optimize_func_calls.c')
-rw-r--r--ext/opcache/Optimizer/optimize_func_calls.c21
1 files changed, 5 insertions, 16 deletions
diff --git a/ext/opcache/Optimizer/optimize_func_calls.c b/ext/opcache/Optimizer/optimize_func_calls.c
index f9ae14290f..cd27704de5 100644
--- a/ext/opcache/Optimizer/optimize_func_calls.c
+++ b/ext/opcache/Optimizer/optimize_func_calls.c
@@ -8,16 +8,12 @@ typedef struct _optimizer_call_info {
zend_op *opline;
} optimizer_call_info;
-static void optimize_func_calls(zend_op_array *op_array, zend_persistent_script *script TSRMLS_DC) {
+static void optimize_func_calls(zend_op_array *op_array, zend_optimizer_ctx *ctx TSRMLS_DC) {
zend_op *opline = op_array->opcodes;
zend_op *end = opline + op_array->last;
int call = 0;
-#if ZEND_EXTENSION_API_NO > PHP_5_4_X_API_NO
- optimizer_call_info *call_stack = ecalloc(op_array->nested_calls + 1, sizeof(optimizer_call_info));
-#else
- int stack_size = 4;
- optimizer_call_info *call_stack = ecalloc(stack_size, sizeof(optimizer_call_info));
-#endif
+ void *checkpoint = zend_arena_checkpoint(ctx->arena);
+ optimizer_call_info *call_stack = zend_arena_calloc(&ctx->arena, op_array->nested_calls + 1, sizeof(optimizer_call_info));
while (opline < end) {
switch (opline->opcode) {
@@ -26,7 +22,7 @@ static void optimize_func_calls(zend_op_array *op_array, zend_persistent_script
if (ZEND_OP2_TYPE(opline) == IS_CONST) {
zend_function *func;
zval *function_name = &op_array->literals[opline->op2.constant + 1];
- if ((func = zend_hash_find_ptr(&script->function_table,
+ if ((func = zend_hash_find_ptr(&ctx->script->function_table,
Z_STR_P(function_name))) != NULL) {
call_stack[call].func = func;
}
@@ -37,13 +33,6 @@ static void optimize_func_calls(zend_op_array *op_array, zend_persistent_script
case ZEND_INIT_STATIC_METHOD_CALL:
call_stack[call].opline = opline;
call++;
-#if ZEND_EXTENSION_API_NO < PHP_5_5_X_API_NO
- if (call == stack_size) {
- stack_size += 4;
- call_stack = erealloc(call_stack, sizeof(optimizer_call_info) * stack_size);
- memset(call_stack + 4, 0, 4 * sizeof(optimizer_call_info));
- }
-#endif
break;
case ZEND_DO_FCALL_BY_NAME:
call--;
@@ -137,6 +126,6 @@ static void optimize_func_calls(zend_op_array *op_array, zend_persistent_script
opline++;
}
- efree(call_stack);
+ zend_arena_release(&ctx->arena, checkpoint);
}
#endif