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
24 lines
334 B
PHP
24 lines
334 B
PHP
--TEST--
|
|
PFA RFC examples: "Constant expressions" section
|
|
--FILE--
|
|
<?php
|
|
|
|
class Foo
|
|
{
|
|
public function __construct(
|
|
private \Closure $callback = bar(1, 2, ?),
|
|
) {}
|
|
}
|
|
|
|
class Example
|
|
{
|
|
public const BASE = 10;
|
|
|
|
private Closure $arrayToInt = array_map(intval(?, self::BASE), ?);
|
|
}
|
|
|
|
?>
|
|
==DONE==
|
|
--EXPECTF--
|
|
==DONE==
|