Skip to content

Commit a24e1f0

Browse files
phpstan-botclaude
authored andcommitted
Gather the VariableWritesNode of each method in ClassStatementsGatherer
ClassMethodsNode now carries the VariableWritesNode of each method body together with the scope inside the method, so rules listening to it can combine parameter usage with the method calls gathered in the class. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
1 parent 01e271d commit a24e1f0

10 files changed

Lines changed: 141 additions & 62 deletions

‎src/Analyser/StmtHandler/ClassLikeHandler.php‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ public function processStmt(
144144
// declaration is visited during an enclosing body's observation pass.
145145
$bodyResult = $nodeScopeResolver->processStmtNodesInternal($stmt, $classLikeStatements, $classScope, $storage, $classStatementsGatherer, StatementContext::createTopLevel());
146146
$nodeScopeResolver->callNodeCallback($nodeCallback, new ClassPropertiesNode($stmt, $this->readWritePropertiesExtensions, $classStatementsGatherer->getProperties(), $classStatementsGatherer->getPropertyUsages(), $classStatementsGatherer->getMethodCalls(), $classStatementsGatherer->getReturnStatementsNodes(), $classStatementsGatherer->getPropertyAssigns(), $classReflection), $classScope, $storage);
147-
$nodeScopeResolver->callNodeCallback($nodeCallback, new ClassMethodsNode($stmt, $classStatementsGatherer->getMethods(), $classStatementsGatherer->getMethodCalls(), $classReflection), $classScope, $storage);
147+
$nodeScopeResolver->callNodeCallback($nodeCallback, new ClassMethodsNode($stmt, $classStatementsGatherer->getMethods(), $classStatementsGatherer->getMethodCalls(), $classReflection, $classStatementsGatherer->getMethodVariableWrites()), $classScope, $storage);
148148
$nodeScopeResolver->callNodeCallback($nodeCallback, new ClassConstantsNode($stmt, $classStatementsGatherer->getConstants(), $classStatementsGatherer->getConstantFetches(), $classReflection), $classScope, $storage);
149149
$classReflection->evictPrivateSymbols();
150150
$this->calledMethodProcessor->clearCalledMethodResults();

‎src/Node/ClassMethodsNode.php‎

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
use PhpParser\Node\Stmt\ClassLike;
77
use PhpParser\NodeAbstract;
88
use PHPStan\Node\Method\MethodCall;
9+
use PHPStan\Node\Method\MethodVariableWrites;
910
use PHPStan\Reflection\ClassReflection;
1011
use PHPStan\Turbo\ReferencedByTurboExtension;
1112

@@ -19,8 +20,9 @@ final class ClassMethodsNode extends NodeAbstract implements VirtualNode
1920
/**
2021
* @param ClassMethod[] $methods
2122
* @param array<int, MethodCall> $methodCalls
23+
* @param list<MethodVariableWrites> $methodVariableWrites
2224
*/
23-
public function __construct(private ClassLike $class, private array $methods, private array $methodCalls, private ClassReflection $classReflection)
25+
public function __construct(private ClassLike $class, private array $methods, private array $methodCalls, private ClassReflection $classReflection, private array $methodVariableWrites = [])
2426
{
2527
parent::__construct($class->getAttributes());
2628
}
@@ -46,6 +48,16 @@ public function getMethodCalls(): array
4648
return $this->methodCalls;
4749
}
4850

51+
/**
52+
* The VariableWritesNode of each method body, with the scope inside the method.
53+
*
54+
* @return list<MethodVariableWrites>
55+
*/
56+
public function getMethodVariableWrites(): array
57+
{
58+
return $this->methodVariableWrites;
59+
}
60+
4961
#[Override]
5062
public function getType(): string
5163
{

‎src/Node/ClassStatementsGatherer.php‎

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
use PHPStan\Node\Constant\ClassConstantFetch;
1616
use PHPStan\Node\Expr\SetExistingOffsetValueTypeExpr;
1717
use PHPStan\Node\Expr\SetOffsetValueTypeExpr;
18+
use PHPStan\Node\Method\MethodVariableWrites;
1819
use PHPStan\Node\Printer\ExprPrinter;
1920
use PHPStan\Node\Property\PropertyAssign;
2021
use PHPStan\Node\Property\PropertyRead;
@@ -51,6 +52,9 @@ final class ClassStatementsGatherer
5152
/** @var \PHPStan\Node\Method\MethodCall[] */
5253
private array $methodCalls = [];
5354

55+
/** @var list<MethodVariableWrites> */
56+
private array $methodVariableWrites = [];
57+
5458
/** @var array<int, PropertyWrite|PropertyRead> */
5559
private array $propertyUsages = [];
5660

@@ -101,6 +105,14 @@ public function getMethodCalls(): array
101105
return $this->methodCalls;
102106
}
103107

108+
/**
109+
* @return list<MethodVariableWrites>
110+
*/
111+
public function getMethodVariableWrites(): array
112+
{
113+
return $this->methodVariableWrites;
114+
}
115+
104116
/**
105117
* @return array<int, PropertyWrite|PropertyRead>
106118
*/
@@ -191,6 +203,10 @@ private function gatherNodes(Node $node, Scope $scope): void
191203
$this->returnStatementNodes[strtolower($node->getMethodName())] = $node;
192204
return;
193205
}
206+
if ($node instanceof VariableWritesNode && $node->getFunctionLike() instanceof Node\Stmt\ClassMethod) {
207+
$this->methodVariableWrites[] = new MethodVariableWrites($node, $scope);
208+
return;
209+
}
194210
if (
195211
$node instanceof Expr\FuncCall
196212
&& $node->name instanceof Node\Name
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
<?php declare(strict_types = 1);
2+
3+
namespace PHPStan\Node\Method;
4+
5+
use PHPStan\Analyser\Scope;
6+
use PHPStan\Node\VariableWritesNode;
7+
use PHPStan\Turbo\ReferencedByTurboExtension;
8+
9+
/**
10+
* @api
11+
*/
12+
#[ReferencedByTurboExtension(key: 'gatheredMethodVariableWrites')]
13+
final class MethodVariableWrites
14+
{
15+
16+
public function __construct(
17+
private VariableWritesNode $node,
18+
private Scope $scope,
19+
)
20+
{
21+
}
22+
23+
public function getNode(): VariableWritesNode
24+
{
25+
return $this->node;
26+
}
27+
28+
public function getScope(): Scope
29+
{
30+
return $this->scope;
31+
}
32+
33+
}

‎turbo-ext/src/ClassLikeHandler.cpp‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -374,8 +374,9 @@ class ClassLikeHandler
374374
{
375375
zv::Val methods = pt_class_statements_gatherer_get(classStatementsGatherer.raw(), PT_CSG_LIST_METHODS);
376376
zv::Val methodCalls = pt_class_statements_gatherer_get(classStatementsGatherer.raw(), PT_CSG_LIST_METHOD_CALLS);
377-
zv::Args nodeArgv{stmt, methods.raw(), methodCalls.raw(), classReflection.raw()};
378-
zv::Val classMethodsNode = pt_type_new(PT_CLASS_CLASS_METHODS_NODE, 4, nodeArgv);
377+
zv::Val methodVariableWrites = pt_class_statements_gatherer_get(classStatementsGatherer.raw(), PT_CSG_LIST_METHOD_VARIABLE_WRITES);
378+
zv::Args nodeArgv{stmt, methods.raw(), methodCalls.raw(), classReflection.raw(), methodVariableWrites.raw()};
379+
zv::Val classMethodsNode = pt_type_new(PT_CLASS_CLASS_METHODS_NODE, 5, nodeArgv);
379380
if (UNEXPECTED(classMethodsNode.isUndef())) return zv::Val();
380381
if (UNEXPECTED(!pt_node_scope_resolver_call_node_callback(nodeScopeResolver, nodeCallback, classMethodsNode.raw(), classScope.raw(), storage))) return zv::Val();
381382
}

‎turbo-ext/src/ClassStatementsGatherer.cpp‎

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,19 @@
66
* ClassLikeHandler hands one to the walk of a class body as its node
77
* callback: every node of the class reaches __invoke(), which forwards the
88
* pair to the wrapped callback (the rule and collector dispatch, PHP) and
9-
* then gathers the properties, methods, method calls, property usages,
10-
* constants, constant fetches, return statements and property assigns the
11-
* Class*Node emissions after the walk carry. The gathering asks the scope
12-
* through MutatingScope's and ScopeContext's direct entries and the class
13-
* reflections through ClassReflection's, so the scope and reflection calls
14-
* made from here (~2.7M per self-analysis) stay native; anything a subclass
15-
* may override or a PHP twin answers goes by name. The collected value
16-
* objects are the PHP classes, built through the class map; the PHPStan
17-
* node classes read here are final with plain getters, so their slots are
18-
* read directly.
9+
* then gathers the properties, methods, method calls, method variable
10+
* writes, property usages, constants, constant fetches, return statements
11+
* and property assigns the Class*Node emissions after the walk carry. The
12+
* gathering asks the scope through MutatingScope's and ScopeContext's direct
13+
* entries and the class reflections through ClassReflection's, so the scope
14+
* and reflection calls made from here (~2.7M per self-analysis) stay native;
15+
* anything a subclass may override or a PHP twin answers goes by name. The
16+
* collected value objects are the PHP classes, built through the class map;
17+
* the PHPStan node classes read here are final with plain getters, so their
18+
* slots are read directly.
1919
*
2020
* State is the twin's properties in declaration order: the untyped
21-
* $nodeCallback, the eight collected arrays, then the promoted
21+
* $nodeCallback, the nine collected arrays, then the promoted
2222
* $classReflection.
2323
*/
2424

@@ -91,6 +91,7 @@ static NodeProp pt_csg_param_hooks = PT_NODE_PROP(PT_CLASS_PARAM, "hooks");
9191
static NodeProp pt_csg_param_var = PT_NODE_PROP(PT_CLASS_PARAM, "var");
9292
static NodeProp pt_csg_arg_value = PT_NODE_PROP(PT_CLASS_ARG, "value");
9393
static NodeProp pt_csg_gathered_class_method_node = PT_NODE_PROP(PT_CLASS_GATHERED_CLASS_METHOD, "node");
94+
static NodeProp pt_csg_variable_writes_function_like = PT_NODE_PROP(PT_CLASS_VARIABLE_WRITES_NODE, "functionLike");
9495

9596
/* Mirrors PHPStan\Node\ClassStatementsGatherer. State lives in the PHP
9697
* object's slots. */
@@ -294,6 +295,9 @@ class ClassStatementsGatherer
294295
}
295296
if (callableOriginal != NULL) return pushNodeScope(slots::methodCalls, PT_CLASS_GATHERED_METHOD_CALL, callableOriginal, scope);
296297
if (isInstanceOf(node, PT_CLASS_METHOD_RETURN_STATEMENTS_NODE)) return addReturnStatementsNode(node, &nodeZv);
298+
if (isInstanceOf(node, PT_CLASS_VARIABLE_WRITES_NODE) && pt_csg_variable_writes_function_like.objectOf(node, PT_CLASS_CLASS_METHOD_STMT) != NULL) {
299+
return pushNodeScope(slots::methodVariableWrites, PT_CLASS_GATHERED_METHOD_VARIABLE_WRITES, &nodeZv, scope);
300+
}
297301
if (isInstanceOf(node, PT_CLASS_FUNC_CALL)) {
298302
zend_object *callee = pt_csg_func_call_name.objectOf(node, PT_CLASS_NAME);
299303
zend_string *calleeName = callee != NULL ? visitors::nameString(callee, pt_csg_name_name) : NULL;
@@ -596,7 +600,7 @@ zv::Val pt_class_statements_gatherer_new(zval *classReflection, zval *nodeCallba
596600

597601
zv::Val pt_class_statements_gatherer_get(zval *gatherer, pt_class_statements_gatherer_list list)
598602
{
599-
static const uint32_t listSlots[] = { slots::properties, slots::methods, slots::methodCalls, slots::propertyUsages, slots::constants, slots::constantFetches, slots::returnStatementNodes, slots::propertyAssigns };
603+
static const uint32_t listSlots[] = { slots::properties, slots::methods, slots::methodCalls, slots::methodVariableWrites, slots::propertyUsages, slots::constants, slots::constantFetches, slots::returnStatementNodes, slots::propertyAssigns };
600604
return zv::Val::copyOf(zv::Ref(OBJ_PROP_NUM(Z_OBJ_P(gatherer), listSlots[list])));
601605
}
602606

@@ -608,12 +612,13 @@ PT_MINIT_REGISTRATION(pt_register_class_statements_gatherer)
608612
{
609613
reg::Class cls("PHPStan\\Node\\ClassStatementsGatherer");
610614
ptdecl::ClassStatementsGatherer::declareClass(cls);
611-
/* the slots PT_CSG_PROP_*: the nine class-body properties first, the
615+
/* the slots PT_CSG_PROP_*: the ten class-body properties first, the
612616
* promoted constructor property after them */
613617
cls.privateNullProperty("nodeCallback");
614618
cls.privateTypedArrayPropertyDefaultEmpty("properties");
615619
cls.privateTypedArrayPropertyDefaultEmpty("methods");
616620
cls.privateTypedArrayPropertyDefaultEmpty("methodCalls");
621+
cls.privateTypedArrayPropertyDefaultEmpty("methodVariableWrites");
617622
cls.privateTypedArrayPropertyDefaultEmpty("propertyUsages");
618623
cls.privateTypedArrayPropertyDefaultEmpty("constants");
619624
cls.privateTypedArrayPropertyDefaultEmpty("constantFetches");
@@ -644,6 +649,10 @@ PT_MINIT_REGISTRATION(pt_register_class_statements_gatherer)
644649
ZEND_PARSE_PARAMETERS_NONE();
645650
RETURN_COPY(OBJ_PROP_NUM(Z_OBJ_P(ZEND_THIS), slots::methodCalls));
646651
});
652+
cls.method(sigs::getMethodVariableWrites, [](INTERNAL_FUNCTION_PARAMETERS) {
653+
ZEND_PARSE_PARAMETERS_NONE();
654+
RETURN_COPY(OBJ_PROP_NUM(Z_OBJ_P(ZEND_THIS), slots::methodVariableWrites));
655+
});
647656
cls.method(sigs::getPropertyUsages, [](INTERNAL_FUNCTION_PARAMETERS) {
648657
ZEND_PARSE_PARAMETERS_NONE();
649658
RETURN_COPY(OBJ_PROP_NUM(Z_OBJ_P(ZEND_THIS), slots::propertyUsages));

‎turbo-ext/src/generated/ClassStatementsGatherer.h‎

Lines changed: 49 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,13 @@ inline constexpr uint32_t nodeCallback = 0;
1414
inline constexpr uint32_t properties = 1;
1515
inline constexpr uint32_t methods = 2;
1616
inline constexpr uint32_t methodCalls = 3;
17-
inline constexpr uint32_t propertyUsages = 4;
18-
inline constexpr uint32_t constants = 5;
19-
inline constexpr uint32_t constantFetches = 6;
20-
inline constexpr uint32_t returnStatementNodes = 7;
21-
inline constexpr uint32_t propertyAssigns = 8;
22-
inline constexpr uint32_t classReflection = 9;
17+
inline constexpr uint32_t methodVariableWrites = 4;
18+
inline constexpr uint32_t propertyUsages = 5;
19+
inline constexpr uint32_t constants = 6;
20+
inline constexpr uint32_t constantFetches = 7;
21+
inline constexpr uint32_t returnStatementNodes = 8;
22+
inline constexpr uint32_t propertyAssigns = 9;
23+
inline constexpr uint32_t classReflection = 10;
2324
} // namespace slot
2425

2526
inline void declareClass(reg::Class &cls)
@@ -34,6 +35,7 @@ inline void declareProperties(reg::Class &cls)
3435
cls.property("properties", ZEND_ACC_PRIVATE, reg::PropertyKind::TypedEmptyArray, MAY_BE_ARRAY);
3536
cls.property("methods", ZEND_ACC_PRIVATE, reg::PropertyKind::TypedEmptyArray, MAY_BE_ARRAY);
3637
cls.property("methodCalls", ZEND_ACC_PRIVATE, reg::PropertyKind::TypedEmptyArray, MAY_BE_ARRAY);
38+
cls.property("methodVariableWrites", ZEND_ACC_PRIVATE, reg::PropertyKind::TypedEmptyArray, MAY_BE_ARRAY);
3739
cls.property("propertyUsages", ZEND_ACC_PRIVATE, reg::PropertyKind::TypedEmptyArray, MAY_BE_ARRAY);
3840
cls.property("constants", ZEND_ACC_PRIVATE, reg::PropertyKind::TypedEmptyArray, MAY_BE_ARRAY);
3941
cls.property("constantFetches", ZEND_ACC_PRIVATE, reg::PropertyKind::TypedEmptyArray, MAY_BE_ARRAY);
@@ -53,49 +55,51 @@ inline constexpr char strings[] =
5355
"getProperties\0" /* 77 */
5456
"getMethods\0" /* 91 */
5557
"getMethodCalls\0" /* 102 */
56-
"getPropertyUsages\0" /* 117 */
57-
"getConstants\0" /* 135 */
58-
"getConstantFetches\0" /* 148 */
59-
"getReturnStatementsNodes\0" /* 167 */
60-
"getPropertyAssigns\0" /* 192 */
61-
"node\0" /* 211 */
62-
"PhpParser\\Node\0" /* 216 */
63-
"scope\0" /* 231 */
64-
"PHPStan\\Analyser\\Scope\0" /* 237 */
65-
"__invoke\0" /* 260 */
66-
"gatherNodes\0" /* 269 */
67-
"PhpParser\\Node\\Expr\\FuncCall\0" /* 281 */
68-
"tryToApplyPropertyReads\0" /* 310 */
69-
"PhpParser\\Node\\Expr\\Variable\0" /* 334 */
70-
"tryToApplyPromotedParameterRead\0" /* 363 */
71-
"ancestorConstructorCall\0" /* 395 */
72-
"PhpParser\\Node\\Expr\\StaticCall\0" /* 419 */
73-
"tryToApplyPropertyWritesFromAncestorConstructor"; /* 450 */
58+
"getMethodVariableWrites\0" /* 117 */
59+
"getPropertyUsages\0" /* 141 */
60+
"getConstants\0" /* 159 */
61+
"getConstantFetches\0" /* 172 */
62+
"getReturnStatementsNodes\0" /* 191 */
63+
"getPropertyAssigns\0" /* 216 */
64+
"node\0" /* 235 */
65+
"PhpParser\\Node\0" /* 240 */
66+
"scope\0" /* 255 */
67+
"PHPStan\\Analyser\\Scope\0" /* 261 */
68+
"__invoke\0" /* 284 */
69+
"gatherNodes\0" /* 293 */
70+
"PhpParser\\Node\\Expr\\FuncCall\0" /* 305 */
71+
"tryToApplyPropertyReads\0" /* 334 */
72+
"PhpParser\\Node\\Expr\\Variable\0" /* 358 */
73+
"tryToApplyPromotedParameterRead\0" /* 387 */
74+
"ancestorConstructorCall\0" /* 419 */
75+
"PhpParser\\Node\\Expr\\StaticCall\0" /* 443 */
76+
"tryToApplyPropertyWritesFromAncestorConstructor"; /* 474 */
7477
inline constexpr reg::PackedArg args[] = {
7578
reg::packed(0, 0, 16), /* __construct $classReflection */
7679
reg::packed(51, MAY_BE_CALLABLE), /* __construct $nodeCallback */
7780
reg::packed(76, MAY_BE_ARRAY), /* getProperties return */
7881
reg::packed(76, MAY_BE_ARRAY), /* getMethods return */
7982
reg::packed(76, MAY_BE_ARRAY), /* getMethodCalls return */
83+
reg::packed(76, MAY_BE_ARRAY), /* getMethodVariableWrites return */
8084
reg::packed(76, MAY_BE_ARRAY), /* getPropertyUsages return */
8185
reg::packed(76, MAY_BE_ARRAY), /* getConstants return */
8286
reg::packed(76, MAY_BE_ARRAY), /* getConstantFetches return */
8387
reg::packed(76, MAY_BE_ARRAY), /* getReturnStatementsNodes return */
8488
reg::packed(76, MAY_BE_ARRAY), /* getPropertyAssigns return */
85-
reg::packed(211, 0, 216), /* __invoke $node */
86-
reg::packed(231, 0, 237), /* __invoke $scope */
89+
reg::packed(235, 0, 240), /* __invoke $node */
90+
reg::packed(255, 0, 261), /* __invoke $scope */
8791
reg::packed(76, MAY_BE_VOID), /* __invoke return */
88-
reg::packed(211, 0, 216), /* gatherNodes $node */
89-
reg::packed(231, 0, 237), /* gatherNodes $scope */
92+
reg::packed(235, 0, 240), /* gatherNodes $node */
93+
reg::packed(255, 0, 261), /* gatherNodes $scope */
9094
reg::packed(76, MAY_BE_VOID), /* gatherNodes return */
91-
reg::packed(211, 0, 281), /* tryToApplyPropertyReads $node */
92-
reg::packed(231, 0, 237), /* tryToApplyPropertyReads $scope */
95+
reg::packed(235, 0, 305), /* tryToApplyPropertyReads $node */
96+
reg::packed(255, 0, 261), /* tryToApplyPropertyReads $scope */
9397
reg::packed(76, MAY_BE_VOID), /* tryToApplyPropertyReads return */
94-
reg::packed(211, 0, 334), /* tryToApplyPromotedParameterRead $node */
95-
reg::packed(231, 0, 237), /* tryToApplyPromotedParameterRead $scope */
98+
reg::packed(235, 0, 358), /* tryToApplyPromotedParameterRead $node */
99+
reg::packed(255, 0, 261), /* tryToApplyPromotedParameterRead $scope */
96100
reg::packed(76, MAY_BE_VOID), /* tryToApplyPromotedParameterRead return */
97-
reg::packed(395, 0, 419), /* tryToApplyPropertyWritesFromAncestorConstructor $ancestorConstructorCall */
98-
reg::packed(231, 0, 237), /* tryToApplyPropertyWritesFromAncestorConstructor $scope */
101+
reg::packed(419, 0, 443), /* tryToApplyPropertyWritesFromAncestorConstructor $ancestorConstructorCall */
102+
reg::packed(255, 0, 261), /* tryToApplyPropertyWritesFromAncestorConstructor $scope */
99103
reg::packed(76, MAY_BE_VOID), /* tryToApplyPropertyWritesFromAncestorConstructor return */
100104
};
101105
using Sig = reg::Sig<strings, args>;
@@ -107,16 +111,17 @@ inline constexpr sigtab::Sig __construct = { { 64 /* __construct */, 2, 0, 2, re
107111
inline constexpr sigtab::Sig getProperties = { { 77 /* getProperties */, 0, 2, 0, 2, ZEND_ACC_PUBLIC } };
108112
inline constexpr sigtab::Sig getMethods = { { 91 /* getMethods */, 0, 3, 0, 3, ZEND_ACC_PUBLIC } };
109113
inline constexpr sigtab::Sig getMethodCalls = { { 102 /* getMethodCalls */, 0, 4, 0, 4, ZEND_ACC_PUBLIC } };
110-
inline constexpr sigtab::Sig getPropertyUsages = { { 117 /* getPropertyUsages */, 0, 5, 0, 5, ZEND_ACC_PUBLIC } };
111-
inline constexpr sigtab::Sig getConstants = { { 135 /* getConstants */, 0, 6, 0, 6, ZEND_ACC_PUBLIC } };
112-
inline constexpr sigtab::Sig getConstantFetches = { { 148 /* getConstantFetches */, 0, 7, 0, 7, ZEND_ACC_PUBLIC } };
113-
inline constexpr sigtab::Sig getReturnStatementsNodes = { { 167 /* getReturnStatementsNodes */, 0, 8, 0, 8, ZEND_ACC_PUBLIC } };
114-
inline constexpr sigtab::Sig getPropertyAssigns = { { 192 /* getPropertyAssigns */, 0, 9, 0, 9, ZEND_ACC_PUBLIC } };
115-
inline constexpr sigtab::Sig __invoke = { { 260 /* __invoke */, 2, 10, 2, 12, ZEND_ACC_PUBLIC } };
116-
inline constexpr sigtab::Sig gatherNodes = { { 269 /* gatherNodes */, 2, 13, 2, 15, ZEND_ACC_PRIVATE } };
117-
inline constexpr sigtab::Sig tryToApplyPropertyReads = { { 310 /* tryToApplyPropertyReads */, 2, 16, 2, 18, ZEND_ACC_PRIVATE } };
118-
inline constexpr sigtab::Sig tryToApplyPromotedParameterRead = { { 363 /* tryToApplyPromotedParameterRead */, 2, 19, 2, 21, ZEND_ACC_PRIVATE } };
119-
inline constexpr sigtab::Sig tryToApplyPropertyWritesFromAncestorConstructor = { { 450 /* tryToApplyPropertyWritesFromAncestorConstructor */, 2, 22, 2, 24, ZEND_ACC_PRIVATE } };
114+
inline constexpr sigtab::Sig getMethodVariableWrites = { { 117 /* getMethodVariableWrites */, 0, 5, 0, 5, ZEND_ACC_PUBLIC } };
115+
inline constexpr sigtab::Sig getPropertyUsages = { { 141 /* getPropertyUsages */, 0, 6, 0, 6, ZEND_ACC_PUBLIC } };
116+
inline constexpr sigtab::Sig getConstants = { { 159 /* getConstants */, 0, 7, 0, 7, ZEND_ACC_PUBLIC } };
117+
inline constexpr sigtab::Sig getConstantFetches = { { 172 /* getConstantFetches */, 0, 8, 0, 8, ZEND_ACC_PUBLIC } };
118+
inline constexpr sigtab::Sig getReturnStatementsNodes = { { 191 /* getReturnStatementsNodes */, 0, 9, 0, 9, ZEND_ACC_PUBLIC } };
119+
inline constexpr sigtab::Sig getPropertyAssigns = { { 216 /* getPropertyAssigns */, 0, 10, 0, 10, ZEND_ACC_PUBLIC } };
120+
inline constexpr sigtab::Sig __invoke = { { 284 /* __invoke */, 2, 11, 2, 13, ZEND_ACC_PUBLIC } };
121+
inline constexpr sigtab::Sig gatherNodes = { { 293 /* gatherNodes */, 2, 14, 2, 16, ZEND_ACC_PRIVATE } };
122+
inline constexpr sigtab::Sig tryToApplyPropertyReads = { { 334 /* tryToApplyPropertyReads */, 2, 17, 2, 19, ZEND_ACC_PRIVATE } };
123+
inline constexpr sigtab::Sig tryToApplyPromotedParameterRead = { { 387 /* tryToApplyPromotedParameterRead */, 2, 20, 2, 22, ZEND_ACC_PRIVATE } };
124+
inline constexpr sigtab::Sig tryToApplyPropertyWritesFromAncestorConstructor = { { 474 /* tryToApplyPropertyWritesFromAncestorConstructor */, 2, 23, 2, 25, ZEND_ACC_PRIVATE } };
120125
} // namespace sig
121126

122127
} // namespace ptdecl::ClassStatementsGatherer

0 commit comments

Comments
 (0)