Changes to PHP Internals
-
Extensions cannot override zend_execute() any more and
should override zend_execute_ex() instead.
EG(current_execute_data)
is already initialized in
zend_execute_ex(), so for compatibility extensions may
need to use
EG(current_execute_data)->prev_execute_data
instead.
-
Removed
EG(arg_types_stack)
,
EX(fbc)
, EX(called_scope)
and
EX(current_object)
.
-
Added
op_array->nested_calls
, which is calculated
at compile time.
-
Added
EX(call_slots)
, which is an array to store
information about syntaticaly nested calls (e.g.
foo(bar())
) and is preallocated together with
execute_data
.
-
Added
EX(call)
, which is a pointer to a current
calling function, and is an element of EX(call_slots)
.
-
Opcodes
INIT_METHOD_CALL,
ZEND_INIT_STATIC_METHOD_CALL,
ZEND_INIT_FCALL_BY_NAME
and
ZEND_INIT_NS_FCALL_BY_NAME
use
result.num
as an index in
EX(call_slots)
.
-
Opcode ZEND_NEW uses
extended_value
as an index in
EX(call_slots)
.
-
Opcodes ZEND_DO_FCALL
and
ZEND_DO_FCALL_BY_NAME
use
op2.num
as an index in
EX(call_slots)
.
-
Added
op_array->used_stack
, which is calculated at
compile time; the corresponding stack space is preallocated together with
execute_data
. As a result, the ZEND_SEND* and
ZEND_DO_FCALL* opcodes no longer need to check for stack overflow.
-
Removed
execute_data->Ts
field. The VM temporary
variables are always allocated immediately before the
execute_data
structure, and are now accessed by their
offset from the execute_data
base pointer instead of
via execute_data->Ts
. The compiler stores new
offsets in op_array->opcodes[*].op?.num
. The
EX_TMP_VAR() and EX_TMP_VAR_NUM()
macros can be used to access temporary variables by offset or number. You
can convert the number to an offset using EX_TMP_VAR_NUM(0,
num) or offset to number using
(EX_TMP_VAR_NUM(0,0)-EX_TMP_VAR(0,offset)).
-
Removed the
execute_data->CVs
field. The VM
compiled variables are always allocated immediately after the
execute_data
structure, and are now accessed by the
offset from the execute_data
base pointer instead of
via execute_data->CVs
. You can use the
EX_CV_NUM() macro to access compiled variables by
number.