summaryrefslogtreecommitdiff
path: root/ext/opcache/Optimizer/zend_optimizer.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/opcache/Optimizer/zend_optimizer.c')
-rw-r--r--ext/opcache/Optimizer/zend_optimizer.c27
1 files changed, 15 insertions, 12 deletions
diff --git a/ext/opcache/Optimizer/zend_optimizer.c b/ext/opcache/Optimizer/zend_optimizer.c
index 973ba3aaac..ce928f8db1 100644
--- a/ext/opcache/Optimizer/zend_optimizer.c
+++ b/ext/opcache/Optimizer/zend_optimizer.c
@@ -544,24 +544,29 @@ static void zend_accel_optimize(zend_op_array *op_array,
int zend_accel_script_optimize(zend_persistent_script *script TSRMLS_DC)
{
+ uint idx, j;
Bucket *p, *q;
HashTable *constants = NULL;
+ zend_class_entry *ce;
+ zend_op_array *op_array;
zend_accel_optimize(&script->main_op_array, script, &constants TSRMLS_CC);
- p = script->function_table.pListHead;
- while (p) {
- zend_op_array *op_array = (zend_op_array*)p->pData;
+ for (idx = 0; idx < script->function_table.nNumUsed; idx++) {
+ p = script->function_table.arData + idx;
+ if (!p->xData) continue;
+ op_array = (zend_op_array*)p->xData;
zend_accel_optimize(op_array, script, &constants TSRMLS_CC);
- p = p->pListNext;
}
- p = script->class_table.pListHead;
- while (p) {
- zend_class_entry *ce = (zend_class_entry*)p->pDataPtr;
- q = ce->function_table.pListHead;
- while (q) {
- zend_op_array *op_array = (zend_op_array*)q->pData;
+ for (idx = 0; idx < script->class_table.nNumUsed; idx++) {
+ p = script->class_table.arData + idx;
+ if (!p->xData) continue;
+ ce = (zend_class_entry*)p->xData;
+ for (j = 0; j < ce->function_table.nNumUsed; j++) {
+ q = ce->function_table.arData + j;
+ if (!q->xData) continue;
+ op_array = (zend_op_array*)q->xData;
if (op_array->scope == ce) {
zend_accel_optimize(op_array, script, &constants TSRMLS_CC);
} else if (op_array->type == ZEND_USER_FUNCTION) {
@@ -572,9 +577,7 @@ int zend_accel_script_optimize(zend_persistent_script *script TSRMLS_DC)
op_array->static_variables = ht;
}
}
- q = q->pListNext;
}
- p = p->pListNext;
}
if (constants) {