Files
Arnaud Le Blanc 2d359a40b7 [PFA 3/n] Support PFA in const exprs (#22785)
* Use a pointer to the declaring opline->lineno as unique addr, instead of the declaring opline itself

zend_partial_create() takes a 'zend_op* declaring_opline' parameter for the
purpose of building a cache key: the opline address is unique to this PFA as
long as it's in SHM.

However the declaring opline is not available when evaluating a PFA AST. Replace
the parameter by 'uint32_t* declaring_lineno'. Callers can pass
'&zend_op->lineno' or '&ast->lineno': Both are unique to the related PFA.

* zend_partial_create(): Remove the dependency on the declaring op_array

The declaring op_array is used for multiple purposes:
 * Generating a PFA name
 * Finding the filename
 * Finding whether op_array is cached, and therefore whether the PFA should be
   cached too

However it's not available when evaluating a PFA AST.

Remove the declaring_op_array argument, and pass the relevant information
directly:
 * Generate the PFA name at compile time, pass it as argument to zend_partial_create()
 * Pass the filename and a cacheable flag as argument to zend_partial_create()

* Support for PFA in constant expressions
2026-07-27 17:59:25 +02:00

14 lines
213 B
PHP

--TEST--
PFA in constexpr: variadic placeholder must be after named params
--FILE--
<?php
function f($a = g(..., foo: 1)) {
}
f();
?>
--EXPECTF--
Fatal error: Variadic placeholder must be last in %s on line %d