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.
There are no user contributed notes for this page.