Modifications internes à PHP
-
Les extensions ne peuvent plus surcharger zend_execute()
et devraient désormais surcharger zend_execute_ex() à la place.
EG(current_execute_data) est déjà initialisé dans
zend_execute_ex(), donc, pour rester compatible, les extensions
peuvent avoir à utiliser EG(current_execute_data)->prev_execute_data
à la place.
-
Suppression de EG(arg_types_stack),
EX(fbc), EX(called_scope) et
EX(current_object).
-
Ajout de op_array->nested_calls, qui est calculé
au moment de la compilation.
-
Ajout de EX(call_slots), qui est un tableau permettant
de stocker des informations sur les appels imbriqués (i.e.
foo(bar())) et est pré-alloué avec
execute_data.
-
Ajout de EX(call), qui est un pointeur vers la fonction
appelante courante, et est un élément de EX(call_slots).
-
Les opcodes
INIT_METHOD_CALL,
ZEND_INIT_STATIC_METHOD_CALL,
ZEND_INIT_FCALL_BY_NAME
et
ZEND_INIT_NS_FCALL_BY_NAME
utilisent result.num comme index dans
EX(call_slots).
-
L'opcode ZEND_NEW utilise
extended_value comme index dans
EX(call_slots).
-
Les opcodes ZEND_DO_FCALL
et
ZEND_DO_FCALL_BY_NAME
utilisent op2.num comme index dans
EX(call_slots).
-
Ajout de op_array->used_stack, qui est calculé lors
de la compilation ; l'espace de la pile correspondant est pré-alloué avec
execute_data. Comme résultat, les opcodes ZEND_SEND* et
ZEND_DO_FCALL* n'ont plus besoin de vérifier les éventuels dépassements de pile.
-
Suppression du champ execute_data->Ts. Les variables temporaires
VM sont toujours allouées immédiatement avant la structure
execute_data, et sont maintenant accédées par leur
position depuis le pointeur de base execute_data au lieu
d'utiliser execute_data->Ts. Le compilateur stocke les
nouvelles positions dans op_array->opcodes[*].op?.num.
Les macros EX_TMP_VAR() et EX_TMP_VAR_NUM()
peuvent être utilisées pour accéder aux variables temporaires par leur position
ou leur numéro. Vous pouvez convertir le numéro en position en utilisant
EX_TMP_VAR_NUM(0,num) ou la position en numéro en utilisant
(EX_TMP_VAR_NUM(0,0)-EX_TMP_VAR(0,offset)).
-
Suppression du champ execute_data->CVs.
Les variables VM compilées sont toujours allouées immédiatement
après la structure execute_data, et sont désormais
accédées par leur position depuis le pointeur de base
execute_data au lieu d'utiliser
execute_data->CVs. Vous pouvez utiliser la macro
EX_CV_NUM() pour accéder aux variables compilées par leur
numéro.