Skip to content

Commit 4b93bd0

Browse files
committed
gen_stub: Fix generation for @generate-legacy-arginfo 70000
> Uncaught Error: Cannot indirectly modify readonly property ClassInfo::$constInfos in gen_stub.php:4158
1 parent 9f71d29 commit 4b93bd0

File tree

4 files changed

+17
-35
lines changed

4 files changed

+17
-35
lines changed

build/gen_stub.php

Lines changed: 11 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1280,8 +1280,8 @@ class FuncInfo {
12801280
private bool $supportsCompileTimeEval;
12811281
public readonly bool $verify;
12821282
/** @var ArgInfo[] */
1283-
public readonly array $args;
1284-
public readonly ReturnInfo $return;
1283+
public /* readonly */ array $args;
1284+
public /* readonly */ ReturnInfo $return;
12851285
private readonly int $numRequiredArgs;
12861286
public readonly ?string $cond;
12871287
public bool $isUndocumentable;
@@ -2184,9 +2184,7 @@ public function toArgInfoCode(?int $minPHPCompatibility): string {
21842184

21852185
public function __clone()
21862186
{
2187-
foreach ($this->args as $key => $argInfo) {
2188-
$this->args[$key] = clone $argInfo;
2189-
}
2187+
$this->args = array_map(fn ($o) => clone $o, $this->args);
21902188
$this->return = clone $this->return;
21912189
}
21922190
}
@@ -3371,9 +3369,9 @@ class ClassInfo {
33713369
/** @var Name[] */
33723370
private readonly array $implements;
33733371
/** @var ConstInfo[] */
3374-
public readonly array $constInfos;
3372+
public /* readonly */ array $constInfos;
33753373
/** @var PropertyInfo[] */
3376-
private readonly array $propertyInfos;
3374+
private /* readonly */ array $propertyInfos;
33773375
/** @var FuncInfo[] */
33783376
public array $funcInfos;
33793377
/** @var EnumCaseInfo[] */
@@ -4154,17 +4152,9 @@ private function createIncludeElement(DOMDocument $doc, string $query, int $inde
41544152

41554153
public function __clone()
41564154
{
4157-
foreach ($this->constInfos as $key => $constInfo) {
4158-
$this->constInfos[$key] = clone $constInfo;
4159-
}
4160-
4161-
foreach ($this->propertyInfos as $key => $propertyInfo) {
4162-
$this->propertyInfos[$key] = clone $propertyInfo;
4163-
}
4164-
4165-
foreach ($this->funcInfos as $key => $funcInfo) {
4166-
$this->funcInfos[$key] = clone $funcInfo;
4167-
}
4155+
$this->constInfos = array_map(fn ($o) => clone $o, $this->constInfos);
4156+
$this->propertyInfos = array_map(fn ($o) => clone $o, $this->propertyInfos);
4157+
$this->funcInfos = array_map(fn ($o) => clone $o, $this->funcInfos);
41684158
}
41694159

41704160
/**
@@ -4275,17 +4265,9 @@ public function getAllConstInfos(): array {
42754265

42764266
public function __clone()
42774267
{
4278-
foreach ($this->constInfos as $key => $constInfo) {
4279-
$this->constInfos[$key] = clone $constInfo;
4280-
}
4281-
4282-
foreach ($this->funcInfos as $key => $funcInfo) {
4283-
$this->funcInfos[$key] = clone $funcInfo;
4284-
}
4285-
4286-
foreach ($this->classInfos as $key => $classInfo) {
4287-
$this->classInfos[$key] = clone $classInfo;
4288-
}
4268+
$this->constInfos = array_map(fn ($o) => clone $o, $this->constInfos);
4269+
$this->funcInfos = array_map(fn ($o) => clone $o, $this->funcInfos);
4270+
$this->classInfos = array_map(fn ($o) => clone $o, $this->classInfos);
42894271
}
42904272

42914273
private function getMinimumPhpVersionIdCompatibility(): ?int {

ext/zend_test/test.stub.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
/**
44
* @generate-class-entries static
55
* @generate-c-enums
6-
* @generate-legacy-arginfo 80000
6+
* @generate-legacy-arginfo 70000
77
* @undocumentable
88
*/
99
namespace {

ext/zend_test/test_arginfo.h

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ext/zend_test/test_decl.h

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)