Cambios internos en PHP
-
Las extensiones ya no pueden sobrescribir zend_execute(), por lo que
deberían sobrescribir en su lugar zend_execute_ex().
EG(current_execute_data) ya están inicializado en
zend_execute_ex(), por lo que pordría ser necesario el empleo de
EG(current_execute_data)->prev_execute_data en su lugar para que
las extensiones sean compatibles.
-
Se eliminó EG(arg_types_stack),
EX(fbc), EX(called_scope) y
EX(current_object).
-
Se añadió op_array->nested_calls, la cual se calcula
en tiempo de compilación.
-
Se añadió EX(call_slots), la cual es un array para almacenar
información sobre llamadas anidadas sintácticamente (p.ej.,
foo(bar())) y es preasignada junto con
execute_data.
-
Se añadió EX(call), la cual es un puntero a la función
llamada en uso; es un elemento de EX(call_slots).
-
Los códigos de operación
INIT_METHOD_CALL,
ZEND_INIT_STATIC_METHOD_CALL,
ZEND_INIT_FCALL_BY_NAME
y
ZEND_INIT_NS_FCALL_BY_NAME
emplean result.num como índice en
EX(call_slots).
-
El código de operación ZEND_NEW emplea
extended_value como índice en
EX(call_slots).
-
Los códigos de operación ZEND_DO_FCALL
y
ZEND_DO_FCALL_BY_NAME
emplean op2.num como índice en
EX(call_slots).
-
Se añadió op_array->used_stack, la cual es calculada en
tiempo de compilación; el espacio de pila correspondiente es preasignado junto con
execute_data. Como resultado, los códigos de operación ZEND_SEND* y
ZEND_DO_FCALL* ya no necesitan verificar desbordamientos de pila.
-
Se eliminó el campo execute_data->Ts. Las variables temporales de
la máquina virtual se asignan siempre inmediatamente antes de la estructura
execute_data, por lo que ahora se pueden acceder a dichas variables por su
índice desde el puntero base de execute_data en lugar de
mediante execute_data->Ts. El compilador almacena los nuevos
índices en op_array->opcodes[*].op?.num. Las macros
EX_TMP_VAR() y EX_TMP_VAR_NUM()
se pueden usar para acceder a las variables temporales por el índice o número. Se
puede convertir el número a un índice mediante EX_TMP_VAR_NUM(0,
num) o convertir de índice a número mediante
(EX_TMP_VAR_NUM(0,0)-EX_TMP_VAR(0,offset)).
-
Se eliminó el campo execute_data->CVs. La variables compiladas de
la máquina virtual son siempre asignadas inmediantamente después de la estructura
execute_data, or lo que ahora se pueden acceder a dichas variables por su
índice desde el puntero base de execute_data en lugar de
vmedianteia execute_data->CVs. Se puede emplear la macro
EX_CV_NUM() para acceder a dichas variables compiladas mediante
el número.