mirror of
https://github.com/php/php-src.git
synced 2026-10-29 02:07:35 +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
21 lines
311 B
PHP
21 lines
311 B
PHP
--TEST--
|
|
PFA in constexpr: error during partial creation
|
|
--FILE--
|
|
<?php
|
|
|
|
function f($a = g(?)) {
|
|
}
|
|
|
|
function g($a, $b) {
|
|
}
|
|
|
|
try {
|
|
f();
|
|
} catch (Error $e) {
|
|
echo $e::class, ": ", $e->getMessage(), "\n";
|
|
}
|
|
|
|
?>
|
|
--EXPECT--
|
|
ArgumentCountError: Partial application of g() expects exactly 2 arguments, 1 given
|