mirror of
https://github.com/php/php-src.git
synced 2026-10-28 17:56:50 +08:00
* 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
14 lines
213 B
PHP
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
|