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.
LoadingChargement en cours