diff --git a/src/Analyser/MutatingScope.php b/src/Analyser/MutatingScope.php index 85867200a20..f30dbd2c6fd 100644 --- a/src/Analyser/MutatingScope.php +++ b/src/Analyser/MutatingScope.php @@ -1518,7 +1518,7 @@ public function withRecordedStatementDelta(self $recordedEntry, self $recordedEx $conditionalExpressions, [], [], - [], + $this->inFunctionCallsStack, $this->inFirstLevelStatement, $recordedExit->afterExtractCall, ); @@ -1785,6 +1785,31 @@ public function popInFunctionCall(): self return $parentScope; } + /** + * Takes the function call stack of $scope. A throw point records its scope + * in the middle of a call, so the catch and finally blocks built from it + * take the stack of the try statement instead. + */ + public function withFunctionCallStackOf(self $scope): self + { + if ($this->inFunctionCallsStack === $scope->inFunctionCallsStack) { + return $this; + } + + /** @var static */ + return ScopeOps::scopeWith( + $this, + $this->expressionTypes, + $this->nativeExpressionTypes, + $this->conditionalExpressions, + $this->currentlyAssignedExpressions, + $this->currentlyAllowedUndefinedExpressions, + $scope->inFunctionCallsStack, + $this->inFirstLevelStatement, + $this->afterExtractCall, + ); + } + /** @api */ public function isInClassExists(string $className): bool { @@ -2309,6 +2334,7 @@ public function enterClosureBind(?Type $thisType, ?Type $nativeThisType, array $ $this->conditionalExpressions, $scopeClasses, $this->anonymousFunctionReflection, + inFunctionCallsStack: $this->inFunctionCallsStack, templateArgumentFrame: $this->templateArgumentFrame, templateArgumentConstraints: $this->templateArgumentConstraints, ); @@ -2340,6 +2366,7 @@ public function restoreOriginalScopeAfterClosureBind(self $originalScope): self $this->conditionalExpressions, $originalScope->inClosureBindScopeClasses, $this->anonymousFunctionReflection, + inFunctionCallsStack: $this->inFunctionCallsStack, templateArgumentFrame: $this->templateArgumentFrame, templateArgumentConstraints: $this->templateArgumentConstraints, ); @@ -2411,6 +2438,7 @@ public function enterClosureCall(Type $thisType, Type $nativeThisType): self $this->conditionalExpressions, $thisType->getObjectClassNames(), $this->anonymousFunctionReflection, + inFunctionCallsStack: $this->inFunctionCallsStack, templateArgumentFrame: $this->templateArgumentFrame, templateArgumentConstraints: $this->templateArgumentConstraints, ); @@ -3019,7 +3047,7 @@ public function enterExpressionAssign(Expr $expr, bool $isPlainWrite = true): se $this->isInFirstLevelStatement(), $currentlyAssignedExpressions, $this->currentlyAllowedUndefinedExpressions, - [], + $this->inFunctionCallsStack, $this->afterExtractCall, $this->parentScope, $this->nativeTypesPromoted, @@ -3050,7 +3078,7 @@ public function exitExpressionAssign(Expr $expr): self $this->isInFirstLevelStatement(), $currentlyAssignedExpressions, $this->currentlyAllowedUndefinedExpressions, - [], + $this->inFunctionCallsStack, $this->afterExtractCall, $this->parentScope, $this->nativeTypesPromoted, @@ -3111,7 +3139,7 @@ public function setAllowedUndefinedExpression(Expr $expr): self $this->isInFirstLevelStatement(), $this->currentlyAssignedExpressions, $currentlyAllowedUndefinedExpressions, - [], + $this->inFunctionCallsStack, $this->afterExtractCall, $this->parentScope, $this->nativeTypesPromoted, @@ -3142,7 +3170,7 @@ public function unsetAllowedUndefinedExpression(Expr $expr): self $this->isInFirstLevelStatement(), $this->currentlyAssignedExpressions, $currentlyAllowedUndefinedExpressions, - [], + $this->inFunctionCallsStack, $this->afterExtractCall, $this->parentScope, $this->nativeTypesPromoted, @@ -3774,7 +3802,7 @@ public function invalidateExpression(Expr $expressionToInvalidate, bool $require $result[2], $this->currentlyAssignedExpressions, $this->currentlyAllowedUndefinedExpressions, - [], + $this->inFunctionCallsStack, $this->inFirstLevelStatement, $this->afterExtractCall, ); @@ -3817,7 +3845,7 @@ private function invalidateMethodsOnExpression(Expr $expressionToInvalidate): se $this->conditionalExpressions, $this->currentlyAssignedExpressions, $this->currentlyAllowedUndefinedExpressions, - [], + $this->inFunctionCallsStack, $this->inFirstLevelStatement, $this->afterExtractCall, ); @@ -4429,7 +4457,7 @@ private function mergeWithVariableState(?self $otherScope, bool $preserveVacuous $conditionalExpressions, [], [], - [], + $this->inFunctionCallsStack, $this->inFirstLevelStatement, $this->afterExtractCall && $otherScope->afterExtractCall, ); @@ -4708,7 +4736,7 @@ public function processFinallyScope(self $finallyScope, self $originalFinallySco $this->inFirstLevelStatement, [], [], - [], + $this->inFunctionCallsStack, $this->afterExtractCall, $this->parentScope, $this->nativeTypesPromoted, @@ -4857,7 +4885,7 @@ public function processAlwaysIterableForeachScopeWithoutPollute(self $finalScope $this->inFirstLevelStatement, [], [], - [], + $this->inFunctionCallsStack, $this->afterExtractCall, $this->parentScope, $this->nativeTypesPromoted, @@ -4922,7 +4950,7 @@ private function generalizeWithVariableState(self $otherScope, ?array $writableV $this->inFirstLevelStatement, [], [], - [], + $this->inFunctionCallsStack, $this->afterExtractCall, $this->parentScope, $this->nativeTypesPromoted, diff --git a/src/Analyser/StmtHandler/TryCatchHandler.php b/src/Analyser/StmtHandler/TryCatchHandler.php index c41c2168982..44639071276 100644 --- a/src/Analyser/StmtHandler/TryCatchHandler.php +++ b/src/Analyser/StmtHandler/TryCatchHandler.php @@ -221,7 +221,8 @@ public function processStmt( // of the walk does not flow anywhere $deadCatchScope = null; foreach ($branchScopeResult->getThrowPoints() as $throwPoint) { - $deadCatchScope = $deadCatchScope === null ? $throwPoint->getScope() : $deadCatchScope->mergeWith($throwPoint->getScope()); + $throwPointScope = $throwPoint->getScope()->withFunctionCallStackOf($scope); + $deadCatchScope = $deadCatchScope === null ? $throwPointScope : $deadCatchScope->mergeWith($throwPointScope); } $deadCatchScope = ($deadCatchScope ?? $scope->mergeWith($branchScope))->enterCatchType($catchType instanceof NeverType ? $originalCatchType : $catchType, $catchNode->var !== null && is_string($catchNode->var->name) ? $catchNode->var->name : null); $deadCatchResult = $nodeScopeResolver->processStmtNodesInternal($catchNode, $catchNode->stmts, $deadCatchScope, $storage, $nodeCallback, $context); @@ -249,10 +250,11 @@ public function processStmt( $catchScope = null; foreach ($matchingThrowPoints as $matchingThrowPoint) { + $throwPointScope = $matchingThrowPoint->getScope()->withFunctionCallStackOf($scope); if ($catchScope === null) { - $catchScope = $matchingThrowPoint->getScope(); + $catchScope = $throwPointScope; } else { - $catchScope = $catchScope->mergeWith($matchingThrowPoint->getScope()); + $catchScope = $catchScope->mergeWith($throwPointScope); } } @@ -297,7 +299,7 @@ public function processStmt( if ($finallyScope === null) { continue; } - $finallyScope = $finallyScope->mergeWith($catchThrowPoint->getScope()); + $finallyScope = $finallyScope->mergeWith($catchThrowPoint->getScope()->withFunctionCallStackOf($scope)); } } @@ -309,7 +311,7 @@ public function processStmt( if ($finallyScope === null) { continue; } - $finallyScope = $finallyScope->mergeWith($throwPoint->getScope()); + $finallyScope = $finallyScope->mergeWith($throwPoint->getScope()->withFunctionCallStackOf($scope)); } if ($finallyScope !== null) { diff --git a/tests/PHPStan/Rules/Classes/InstantiationRuleTest.php b/tests/PHPStan/Rules/Classes/InstantiationRuleTest.php index 5bf9468dc76..cb2635cd477 100644 --- a/tests/PHPStan/Rules/Classes/InstantiationRuleTest.php +++ b/tests/PHPStan/Rules/Classes/InstantiationRuleTest.php @@ -289,6 +289,17 @@ public function testClassExists(): void $this->analyse([__DIR__ . '/data/instantiation-class-exists.php'], []); } + public function testClassExistsInCatch(): void + { + $this->analyse([__DIR__ . '/data/instantiation-class-exists-in-catch.php'], [ + [ + 'Instantiated class InstantiationClassExistsInCatch\Missing not found.', + 15, + 'Learn more at https://phpstan.org/user-guide/discovering-symbols', + ], + ]); + } + public function testBug3404(): void { $this->analyse([__DIR__ . '/data/bug-3404.php'], [ diff --git a/tests/PHPStan/Rules/Classes/data/instantiation-class-exists-in-catch.php b/tests/PHPStan/Rules/Classes/data/instantiation-class-exists-in-catch.php new file mode 100644 index 00000000000..60517d49758 --- /dev/null +++ b/tests/PHPStan/Rules/Classes/data/instantiation-class-exists-in-catch.php @@ -0,0 +1,17 @@ += 8.0.0')] + public function testBug15377(): void + { + $this->analyse([__DIR__ . '/data/bug-15377.php'], [ + [ + 'Bug15377\inTransaction', + 13, + ], + [ + 'Bug15377\inTransaction', + 17, + ], + [ + 'Bug15377\inTransaction', + 27, + ], + [ + 'Bug15377\inTransaction', + 28, + ], + [ + 'Bug15377\inTransaction', + 29, + ], + [ + 'Bug15377\inTransaction', + 43, + ], + [ + "Bug15377\\inTransaction\nBug15377\\takesTwo", + 44, + ], + [ + 'Bug15377\inTransaction', + 52, + ], + [ + 'Bug15377\inTransaction', + 62, + ], + [ + 'Bug15377\inTransaction', + 63, + ], + [ + 'Bug15377\inTransaction', + 64, + ], + [ + 'Bug15377\inTransaction', + 65, + ], + [ + "Bug15377\\inTransaction\nBug15377\\takesTwo", + 66, + ], + [ + 'Bug15377\inTransaction', + 67, + ], + [ + 'Bug15377\inTransaction', + 68, + ], + [ + 'Bug15377\inTransaction', + 69, + ], + [ + 'Bug15377\inTransaction', + 70, + ], + [ + 'Bug15377\inTransaction', + 71, + ], + [ + 'Bug15377\inTransaction', + 72, + ], + ]); + } + } diff --git a/tests/PHPStan/Rules/ScopeFunctionCallStackWithParametersRuleTest.php b/tests/PHPStan/Rules/ScopeFunctionCallStackWithParametersRuleTest.php index 77a7b89931b..1ea6c885614 100644 --- a/tests/PHPStan/Rules/ScopeFunctionCallStackWithParametersRuleTest.php +++ b/tests/PHPStan/Rules/ScopeFunctionCallStackWithParametersRuleTest.php @@ -45,4 +45,87 @@ public function testRule(): void ]); } + #[RequiresPhp('>= 8.0.0')] + public function testBug15377(): void + { + $this->analyse([__DIR__ . '/data/bug-15377.php'], [ + [ + 'Bug15377\inTransaction ($callback)', + 13, + ], + [ + 'Bug15377\inTransaction ($callback)', + 17, + ], + [ + 'Bug15377\inTransaction ($callback)', + 27, + ], + [ + 'Bug15377\inTransaction ($callback)', + 28, + ], + [ + 'Bug15377\inTransaction ($callback)', + 29, + ], + [ + 'Bug15377\inTransaction ($callback)', + 43, + ], + [ + "Bug15377\\inTransaction (\$callback)\nBug15377\\takesTwo (\$j)", + 44, + ], + [ + 'Bug15377\inTransaction ($callback)', + 52, + ], + [ + 'Bug15377\inTransaction ($callback)', + 62, + ], + [ + 'Bug15377\inTransaction ($callback)', + 63, + ], + [ + 'Bug15377\inTransaction ($callback)', + 64, + ], + [ + 'Bug15377\inTransaction ($callback)', + 65, + ], + [ + "Bug15377\\inTransaction (\$callback)\nBug15377\\takesTwo (\$j)", + 66, + ], + [ + 'Bug15377\inTransaction ($callback)', + 67, + ], + [ + 'Bug15377\inTransaction ($callback)', + 68, + ], + [ + 'Bug15377\inTransaction ($callback)', + 69, + ], + [ + 'Bug15377\inTransaction ($callback)', + 70, + ], + [ + 'Bug15377\inTransaction ($callback)', + 71, + ], + [ + 'Bug15377\inTransaction ($callback)', + 72, + ], + ]); + } + } diff --git a/tests/PHPStan/Rules/data/bug-15377.php b/tests/PHPStan/Rules/data/bug-15377.php new file mode 100644 index 00000000000..b099d0262d0 --- /dev/null +++ b/tests/PHPStan/Rules/data/bug-15377.php @@ -0,0 +1,73 @@ += 8.0 + +namespace Bug15377; + +interface Mailer { public function send(): void; } +interface Counter { public function next(): int; } +function inTransaction(callable $callback): void {} + +function a(Mailer $mailer, Counter $counter): void +{ + inTransaction(function () use ($counter): void { + $counter->next(); + throw new \Exception(); + }); + inTransaction(function () use ($mailer): void { + $mailer->send(); + throw new \Exception(); + }); +} + +final class Concrete { public function send(): void {} } +interface Impure { /** @phpstan-impure */ public function next(): int; } +function voidFn(): void {} + +function b(Concrete $c, Impure $i): void +{ + inTransaction(function () use ($c): void { $c->send(); throw new \Exception(); }); + inTransaction(function (): void { voidFn(); throw new \Exception(); }); + inTransaction(function () use ($i): void { $i->next(); throw new \Exception(); }); +} + +interface Queue +{ + /** @phpstan-impure */ + public function next(): int; + public function peek(): ?int; +} +function takesInt(int $i): void {} +function takesTwo(int $i, mixed $j): void {} + +function c(Queue $q): void +{ + inTransaction(function () use ($q): void { $x = $q->peek(); takesInt($q->next()); throw new \Exception(); }); + inTransaction(function () use ($q): void { if ($q->peek() !== null) { takesTwo($q->next(), throw new \Exception()); } }); +} + +/** @throws \RuntimeException */ +function name(): string { return ''; } + +function d(): void +{ + inTransaction(function (): void { try { var_dump(name()); } catch (\RuntimeException $e) { throw $e; } }); +} + +final class Item { public ?string $name = null; public function label(): string { return ''; } } + +/** + * @param list $items + */ +function e(?int $n, bool $b, array $items): void +{ + inTransaction(function () use ($n): void { $x = $n ?? 1; throw new \Exception(); }); + inTransaction(function () use ($n): void { if (isset($n)) { $n++; } throw new \Exception(); }); + inTransaction(function () use ($b): void { if ($b) { $y = 1; } else { $y = 2; } throw new \Exception(); }); + inTransaction(function () use ($b): void { $z = $b ? 1 : 2; throw new \Exception(); }); + inTransaction(function () use ($b): void { takesTwo($b ? 1 : 2, throw new \Exception()); }); + inTransaction(function () use ($items): void { foreach ($items as $item) { $item->name = 'x'; } throw new \Exception(); }); + inTransaction(function () use ($items): void { foreach ($items as $i => $item) { if ($item->name !== null) { break; } $label = $items[$i]->label(); } throw new \Exception(); }); + inTransaction(function () use ($b): void { while ($b) { $b = false; } throw new \Exception(); }); + inTransaction(function (): void { try { var_dump(name()); } finally { $f = 1; } throw new \Exception(); }); + inTransaction(function (): void { try { var_dump(name(), name()); } catch (\RuntimeException $e) { throw $e; } }); + inTransaction(function (): void { $c = \Closure::bind(static function (): void {}, null, null); throw new \Exception(); }); +} diff --git a/turbo-ext/src/MutatingScope.cpp b/turbo-ext/src/MutatingScope.cpp index 1138b46ed9a..396fe2ba622 100644 --- a/turbo-ext/src/MutatingScope.cpp +++ b/turbo-ext/src/MutatingScope.cpp @@ -3049,7 +3049,8 @@ class MutatingScope ZVAL_COPY_VALUE(&args[2], conditionalExpressions.raw()); ZVAL_EMPTY_ARRAY(&args[3]); ZVAL_EMPTY_ARRAY(&args[4]); - ZVAL_EMPTY_ARRAY(&args[5]); + if (UNEXPECTED(!requireSlot(PT_MS_PROP_IN_FUNCTION_CALLS_STACK, "inFunctionCallsStack"))) return zv::Val(); + ZVAL_COPY_VALUE(&args[5], slot(PT_MS_PROP_IN_FUNCTION_CALLS_STACK).raw()); ZVAL_BOOL(&args[6], slotBool(PT_MS_PROP_IN_FIRST_LEVEL_STATEMENT)); ZVAL_BOOL(&args[7], recordedExit.slotBool(PT_MS_PROP_AFTER_EXTRACT_CALL)); return thisDuplicateWith(args); @@ -3437,6 +3438,33 @@ class MutatingScope return parentScope; } + zv::Val withFunctionCallStackOf(zend_object *scopeObject) + { + MutatingScope scope(scopeObject); + if (UNEXPECTED(!requireSlot(PT_MS_PROP_IN_FUNCTION_CALLS_STACK, "inFunctionCallsStack") + || !scope.requireSlot(PT_MS_PROP_IN_FUNCTION_CALLS_STACK, "inFunctionCallsStack"))) { + return zv::Val(); + } + zval *stack = scope.slot(PT_MS_PROP_IN_FUNCTION_CALLS_STACK).raw(); + if (zend_is_identical(slot(PT_MS_PROP_IN_FUNCTION_CALLS_STACK).raw(), stack)) return self_(); + if (UNEXPECTED(!requireSlot(PT_MS_PROP_EXPRESSION_TYPES, "expressionTypes") + || !requireSlot(PT_MS_PROP_NATIVE_EXPRESSION_TYPES, "nativeExpressionTypes") + || !requireSlot(PT_MS_PROP_CONDITIONAL_EXPRESSIONS, "conditionalExpressions") + || !requireSlot(PT_MS_PROP_CURRENTLY_ASSIGNED_EXPRESSIONS, "currentlyAssignedExpressions") + || !requireSlot(PT_MS_PROP_CURRENTLY_ALLOWED_UNDEFINED_EXPRESSIONS, "currentlyAllowedUndefinedExpressions"))) { + return zv::Val(); + } + return scopeWithTables( + Z_ARRVAL_P(slot(PT_MS_PROP_EXPRESSION_TYPES).raw()), + Z_ARRVAL_P(slot(PT_MS_PROP_NATIVE_EXPRESSION_TYPES).raw()), + Z_ARRVAL_P(slot(PT_MS_PROP_CONDITIONAL_EXPRESSIONS).raw()), + Z_ARRVAL_P(slot(PT_MS_PROP_CURRENTLY_ASSIGNED_EXPRESSIONS).raw()), + Z_ARRVAL_P(slot(PT_MS_PROP_CURRENTLY_ALLOWED_UNDEFINED_EXPRESSIONS).raw()), + Z_ARRVAL_P(stack), + slotBool(PT_MS_PROP_IN_FIRST_LEVEL_STATEMENT), + slotBool(PT_MS_PROP_AFTER_EXTRACT_CALL)); + } + /* $this->inFunctionCallsStack entry's [0] — the reflection of the call, * NULL when the entry carries none (the twin's list destructuring) */ static zval *inFunctionCallReflection(zv::Ref entryValue) @@ -4737,7 +4765,8 @@ class MutatingScope a.setBool(CreateArgs::IN_FIRST_LEVEL_STATEMENT, true); a.setEmptyArray(CreateArgs::CURRENTLY_ASSIGNED_EXPRESSIONS); a.setEmptyArray(CreateArgs::CURRENTLY_ALLOWED_UNDEFINED_EXPRESSIONS); - a.setEmptyArray(CreateArgs::IN_FUNCTION_CALLS_STACK); + if (UNEXPECTED(!requireSlot(PT_MS_PROP_IN_FUNCTION_CALLS_STACK, "inFunctionCallsStack"))) return zv::Val(); + a.set(CreateArgs::IN_FUNCTION_CALLS_STACK, slot(PT_MS_PROP_IN_FUNCTION_CALLS_STACK)); a.setBool(CreateArgs::AFTER_EXTRACT_CALL, false); a.setNull(CreateArgs::PARENT_SCOPE); a.setBool(CreateArgs::NATIVE_TYPES_PROMOTED, false); @@ -6017,7 +6046,8 @@ class MutatingScope if (UNEXPECTED(!fillDispatched(a, true, true))) return zv::Val(); a.setOwned(CreateArgs::CURRENTLY_ASSIGNED_EXPRESSIONS, std::move(currentlyAssignedExpressions)); a.setOwned(CreateArgs::CURRENTLY_ALLOWED_UNDEFINED_EXPRESSIONS, std::move(currentlyAllowedUndefinedExpressions)); - a.setEmptyArray(CreateArgs::IN_FUNCTION_CALLS_STACK); + if (UNEXPECTED(!requireSlot(PT_MS_PROP_IN_FUNCTION_CALLS_STACK, "inFunctionCallsStack"))) return zv::Val(); + a.set(CreateArgs::IN_FUNCTION_CALLS_STACK, slot(PT_MS_PROP_IN_FUNCTION_CALLS_STACK)); zv::Val scope = scopeFactoryCreate(a); if (UNEXPECTED(scope.isUndef())) return zv::Val(); if (UNEXPECTED(!assignResolvedTypes(scope))) return zv::Val(); @@ -7027,12 +7057,12 @@ class MutatingScope zend_throw_error(NULL, "phpstan_turbo: ScopeOps::invalidateExpressionEntries() answered an unexpected shape"); return zv::Val(); } - return scopeWith(Z_ARRVAL_P(expressionTypes), Z_ARRVAL_P(nativeExpressionTypes), Z_ARRVAL_P(conditionalExpressions), true); + return scopeWith(Z_ARRVAL_P(expressionTypes), Z_ARRVAL_P(nativeExpressionTypes), Z_ARRVAL_P(conditionalExpressions)); } /* ScopeOps::scopeWith($this, ...) with the twin's argument list: the - * three tables as given, an empty call stack, the rest from $this */ - zv::Val scopeWith(HashTable *expressionTypes, HashTable *nativeExpressionTypes, HashTable *conditionalExpressions, bool emptyCallStack) + * three tables as given, the rest from $this */ + zv::Val scopeWith(HashTable *expressionTypes, HashTable *nativeExpressionTypes, HashTable *conditionalExpressions) { if (UNEXPECTED(!requireSlot(PT_MS_PROP_CURRENTLY_ASSIGNED_EXPRESSIONS, "currentlyAssignedExpressions") || !requireSlot(PT_MS_PROP_CURRENTLY_ALLOWED_UNDEFINED_EXPRESSIONS, "currentlyAllowedUndefinedExpressions") @@ -7046,7 +7076,7 @@ class MutatingScope conditionalExpressions, Z_ARRVAL_P(slot(PT_MS_PROP_CURRENTLY_ASSIGNED_EXPRESSIONS).raw()), Z_ARRVAL_P(slot(PT_MS_PROP_CURRENTLY_ALLOWED_UNDEFINED_EXPRESSIONS).raw()), - emptyCallStack ? (HashTable *) &zend_empty_array : Z_ARRVAL_P(slot(PT_MS_PROP_IN_FUNCTION_CALLS_STACK).raw()), + Z_ARRVAL_P(slot(PT_MS_PROP_IN_FUNCTION_CALLS_STACK).raw()), slotBool(PT_MS_PROP_IN_FIRST_LEVEL_STATEMENT), slotBool(PT_MS_PROP_AFTER_EXTRACT_CALL)); } @@ -7118,7 +7148,7 @@ class MutatingScope return zv::Val(); } if (UNEXPECTED(!requireSlot(PT_MS_PROP_CONDITIONAL_EXPRESSIONS, "conditionalExpressions"))) return zv::Val(); - return scopeWith(Z_ARRVAL_P(expressionTypes), Z_ARRVAL_P(nativeExpressionTypes), Z_ARRVAL_P(slot(PT_MS_PROP_CONDITIONAL_EXPRESSIONS).raw()), true); + return scopeWith(Z_ARRVAL_P(expressionTypes), Z_ARRVAL_P(nativeExpressionTypes), Z_ARRVAL_P(slot(PT_MS_PROP_CONDITIONAL_EXPRESSIONS).raw())); } /* private (twin 3893); its only caller is applySpecifiedTypes() */ @@ -8411,13 +8441,14 @@ class MutatingScope return zv::Val(); } + if (UNEXPECTED(!requireSlot(PT_MS_PROP_IN_FUNCTION_CALLS_STACK, "inFunctionCallsStack"))) return zv::Val(); return scopeWithTables( Z_ARRVAL_P(mergedTypes), Z_ARRVAL_P(mergedNativeTypes), Z_ARRVAL_P(conditionalExpressions.raw()), (HashTable *) &zend_empty_array, (HashTable *) &zend_empty_array, - (HashTable *) &zend_empty_array, + Z_ARRVAL_P(slot(PT_MS_PROP_IN_FUNCTION_CALLS_STACK).raw()), slotBool(PT_MS_PROP_IN_FIRST_LEVEL_STATEMENT), slotBool(PT_MS_PROP_AFTER_EXTRACT_CALL) && theirAfterExtractCall); } @@ -8771,7 +8802,8 @@ class MutatingScope PT_MS_ARG_CREATE(a, CreateArgs::CONDITIONAL_EXPRESSIONS, pt_scope_ops_intersect_conditional_expressions(Z_ARRVAL_P(slot(PT_MS_PROP_CONDITIONAL_EXPRESSIONS).raw()), finallyConditional)); a.setEmptyArray(CreateArgs::CURRENTLY_ASSIGNED_EXPRESSIONS); a.setEmptyArray(CreateArgs::CURRENTLY_ALLOWED_UNDEFINED_EXPRESSIONS); - a.setEmptyArray(CreateArgs::IN_FUNCTION_CALLS_STACK); + if (UNEXPECTED(!requireSlot(PT_MS_PROP_IN_FUNCTION_CALLS_STACK, "inFunctionCallsStack"))) return zv::Val(); + a.set(CreateArgs::IN_FUNCTION_CALLS_STACK, slot(PT_MS_PROP_IN_FUNCTION_CALLS_STACK)); return scopeFactoryCreate(a); } @@ -8968,7 +9000,8 @@ class MutatingScope a.setBool(CreateArgs::IN_FIRST_LEVEL_STATEMENT, slotBool(PT_MS_PROP_IN_FIRST_LEVEL_STATEMENT)); a.setEmptyArray(CreateArgs::CURRENTLY_ASSIGNED_EXPRESSIONS); a.setEmptyArray(CreateArgs::CURRENTLY_ALLOWED_UNDEFINED_EXPRESSIONS); - a.setEmptyArray(CreateArgs::IN_FUNCTION_CALLS_STACK); + if (UNEXPECTED(!requireSlot(PT_MS_PROP_IN_FUNCTION_CALLS_STACK, "inFunctionCallsStack"))) return zv::Val(); + a.set(CreateArgs::IN_FUNCTION_CALLS_STACK, slot(PT_MS_PROP_IN_FUNCTION_CALLS_STACK)); return scopeFactoryCreate(a); } @@ -9078,7 +9111,8 @@ class MutatingScope a.setBool(CreateArgs::IN_FIRST_LEVEL_STATEMENT, slotBool(PT_MS_PROP_IN_FIRST_LEVEL_STATEMENT)); a.setEmptyArray(CreateArgs::CURRENTLY_ASSIGNED_EXPRESSIONS); a.setEmptyArray(CreateArgs::CURRENTLY_ALLOWED_UNDEFINED_EXPRESSIONS); - a.setEmptyArray(CreateArgs::IN_FUNCTION_CALLS_STACK); + if (UNEXPECTED(!requireSlot(PT_MS_PROP_IN_FUNCTION_CALLS_STACK, "inFunctionCallsStack"))) return zv::Val(); + a.set(CreateArgs::IN_FUNCTION_CALLS_STACK, slot(PT_MS_PROP_IN_FUNCTION_CALLS_STACK)); return scopeFactoryCreate(a); } @@ -12587,6 +12621,12 @@ PT_MINIT_REGISTRATION(pt_register_mutating_scope) cls.method(sigs::popInFunctionCall, msPopInFunctionCall); + cls.method(sigs::withFunctionCallStackOf, [](INTERNAL_FUNCTION_PARAMETERS) { + zval *scope; + if (!zp::parse(execute_data, scope)) RETURN_THROWS(); + PT_RETURN_VAL(PT_THIS.withFunctionCallStackOf(Z_OBJ_P(scope))); + }); + cls.method(sigs::isInClassExists, [](INTERNAL_FUNCTION_PARAMETERS) { zend_string *className; if (!zp::parse(execute_data, className)) RETURN_THROWS(); @@ -13504,6 +13544,14 @@ zv::Val pt_mutating_scope_enter_catch_type(zend_object *scope, zval *catchType, return pt_type_call(scope, PT_LC("entercatchtype"), 2, argv); } +zv::Val pt_mutating_scope_with_function_call_stack_of(zend_object *scope, zend_object *otherScope) +{ + if (PT_MS_INHERITS(scope, "withfunctioncallstackof")) return MutatingScope(scope).withFunctionCallStackOf(otherScope); + zval argv[1]; + ZVAL_OBJ(&argv[0], otherScope); + return pt_type_call(scope, PT_LC("withfunctioncallstackof"), 1, argv); +} + zv::Val pt_mutating_scope_process_finally_scope(zend_object *scope, zend_object *finallyScope, zend_object *originalFinallyScope) { if (PT_MS_INHERITS(scope, "processfinallyscope") && EXPECTED(instanceof_function(finallyScope->ce, pt_ce_mutating_scope) && instanceof_function(originalFinallyScope->ce, pt_ce_mutating_scope))) return MutatingScope(scope).processFinallyScope(finallyScope, originalFinallyScope); diff --git a/turbo-ext/src/TryCatchHandler.cpp b/turbo-ext/src/TryCatchHandler.cpp index 78819f6485a..56776c9661d 100644 --- a/turbo-ext/src/TryCatchHandler.cpp +++ b/turbo-ext/src/TryCatchHandler.cpp @@ -156,6 +156,16 @@ inline bool isNeverType(zval *type) return !error; } +/* $throwPoint->getScope()->withFunctionCallStackOf($scope); UNDEF = pending + * exception */ +zv::Val throwPointScope(zval *throwPoint, zval *scope) +{ + zv::Val hold; + zval *throwScope = pt_internal_throw_point_scope(throwPoint, hold); + if (UNEXPECTED(throwScope == NULL)) return zv::Val(); + return pt_mutating_scope_with_function_call_stack_of(Z_OBJ_P(throwScope), Z_OBJ_P(scope)); +} + } // namespace namespace phpstanturbo { @@ -469,14 +479,13 @@ class TryCatchHandler zv::Val branchThrowPointsHold = zv::Val::copyOf(zv::Ref(branchThrowPoints)); if (Z_TYPE_P(branchThrowPointsHold.raw()) == IS_ARRAY) { for (auto throwEntry : zv::ArrRef(branchThrowPointsHold.raw())) { - zv::Val scopeHold; - zval *throwScope = pt_internal_throw_point_scope(throwEntry.value().deref().raw(), scopeHold); - if (UNEXPECTED(throwScope == NULL)) return zv::Val(); + zv::Val throwScope = throwPointScope(throwEntry.value().deref().raw(), scope); + if (UNEXPECTED(throwScope.isUndef())) return zv::Val(); if (mergedScope.isNull()) { - mergedScope = zv::Val::copyOf(zv::Ref(throwScope)); + mergedScope = std::move(throwScope); continue; } - zv::Val merged = pt_mutating_scope_merge_with(Z_OBJ_P(mergedScope.raw()), throwScope); + zv::Val merged = pt_mutating_scope_merge_with(Z_OBJ_P(mergedScope.raw()), throwScope.raw()); if (UNEXPECTED(merged.isUndef())) return zv::Val(); mergedScope = std::move(merged); } @@ -535,10 +544,9 @@ class TryCatchHandler zv::Val catchScope = zv::Val::null(); for (auto matchingEntry : zv::ArrRef(matchingThrowPoints.raw())) { - zv::Val hold; - zval *matchingScope = pt_internal_throw_point_scope(matchingEntry.value().deref().raw(), hold); - if (UNEXPECTED(matchingScope == NULL)) return zv::Val(); - if (UNEXPECTED(!ptlh::mergeOrTake(catchScope, matchingScope))) return zv::Val(); + zv::Val matchingScope = throwPointScope(matchingEntry.value().deref().raw(), scope); + if (UNEXPECTED(matchingScope.isUndef())) return zv::Val(); + if (UNEXPECTED(!ptlh::mergeOrTake(catchScope, matchingScope.raw()))) return zv::Val(); } zend_string *variableName = NULL; @@ -652,10 +660,9 @@ class TryCatchHandler if (Z_TYPE_P(catchThrowPoints.raw()) == IS_ARRAY) { for (auto throwEntry : zv::ArrRef(catchThrowPoints.raw())) { if (finallyScope.isNull()) continue; - zv::Val hold; - zval *throwScope = pt_internal_throw_point_scope(throwEntry.value().deref().raw(), hold); - if (UNEXPECTED(throwScope == NULL)) return zv::Val(); - zv::Val merged = pt_mutating_scope_merge_with(Z_OBJ_P(finallyScope.raw()), throwScope); + zv::Val throwScope = throwPointScope(throwEntry.value().deref().raw(), scope); + if (UNEXPECTED(throwScope.isUndef())) return zv::Val(); + zv::Val merged = pt_mutating_scope_merge_with(Z_OBJ_P(finallyScope.raw()), throwScope.raw()); if (UNEXPECTED(merged.isUndef())) return zv::Val(); finallyScope = std::move(merged); } @@ -668,10 +675,9 @@ class TryCatchHandler for (auto throwEntry : zv::ArrRef(throwPoints.raw())) { if (finallyScope.isNull()) continue; - zv::Val hold; - zval *throwScope = pt_internal_throw_point_scope(throwEntry.value().deref().raw(), hold); - if (UNEXPECTED(throwScope == NULL)) return zv::Val(); - zv::Val merged = pt_mutating_scope_merge_with(Z_OBJ_P(finallyScope.raw()), throwScope); + zv::Val throwScope = throwPointScope(throwEntry.value().deref().raw(), scope); + if (UNEXPECTED(throwScope.isUndef())) return zv::Val(); + zv::Val merged = pt_mutating_scope_merge_with(Z_OBJ_P(finallyScope.raw()), throwScope.raw()); if (UNEXPECTED(merged.isUndef())) return zv::Val(); finallyScope = std::move(merged); } diff --git a/turbo-ext/src/generated/MutatingScope.h b/turbo-ext/src/generated/MutatingScope.h index e01ebcdf60c..8863b2e1d64 100644 --- a/turbo-ext/src/generated/MutatingScope.h +++ b/turbo-ext/src/generated/MutatingScope.h @@ -218,281 +218,282 @@ inline constexpr char strings[] = "rememberTypes\0" /* 2926 */ "pushInFunctionCall\0" /* 2940 */ "popInFunctionCall\0" /* 2959 */ - "className\0" /* 2977 */ - "isInClassExists\0" /* 2987 */ - "getFunctionCallStack\0" /* 3003 */ - "getFunctionCallStackWithParameters\0" /* 3024 */ - "functionName\0" /* 3059 */ - "isInFunctionExists\0" /* 3072 */ - "classReflection\0" /* 3091 */ - "enterClass\0" /* 3107 */ - "traitReflection\0" /* 3118 */ - "enterTrait\0" /* 3134 */ - "classMethod\0" /* 3145 */ - "PhpParser\\Node\\Stmt\\ClassMethod\0" /* 3157 */ - "templateTypeMap\0" /* 3189 */ - "PHPStan\\Type\\Generic\\TemplateTypeMap\0" /* 3205 */ - "phpDocParameterTypes\0" /* 3242 */ - "phpDocReturnType\0" /* 3263 */ - "throwType\0" /* 3280 */ - "deprecatedDescription\0" /* 3290 */ - "isDeprecated\0" /* 3312 */ - "isInternal\0" /* 3325 */ - "isFinal\0" /* 3336 */ - "isPure\0" /* 3344 */ - "acceptsNamedArguments\0" /* 3351 */ - "asserts\0" /* 3373 */ - "PHPStan\\Reflection\\Assertions\0" /* 3381 */ - "selfOutType\0" /* 3411 */ - "phpDocComment\0" /* 3423 */ - "parameterOutTypes\0" /* 3437 */ - "immediatelyInvokedCallableParameters\0" /* 3455 */ - "phpDocClosureThisTypeParameters\0" /* 3492 */ - "isConstructor\0" /* 3524 */ - "resolvedPhpDocBlock\0" /* 3538 */ - "PHPStan\\PhpDoc\\ResolvedPhpDocBlock\0" /* 3558 */ - "phpDocPureUnlessCallableIsImpureParameters\0" /* 3593 */ - "phpDocPureUnlessParameterPassedParameters\0" /* 3636 */ - "enterClassMethod\0" /* 3678 */ - "hook\0" /* 3695 */ - "PhpParser\\Node\\PropertyHook\0" /* 3700 */ - "propertyName\0" /* 3728 */ - "nativePropertyTypeNode\0" /* 3741 */ - "PhpParser\\Node\\Identifier|PhpParser\\Node\\Name|PhpParser\\Node\\ComplexType\0" /* 3764 */ - "phpDocPropertyType\0" /* 3837 */ - "enterPropertyHook\0" /* 3856 */ - "type\0" /* 3874 */ - "transformStaticType\0" /* 3879 */ - "functionLike\0" /* 3899 */ - "PhpParser\\Node\\FunctionLike\0" /* 3912 */ - "getRealParameterTypes\0" /* 3940 */ - "getRealParameterDefaultValues\0" /* 3962 */ - "PhpParser\\Node\\Stmt\\ClassMethod|PhpParser\\Node\\Stmt\\Function_|PhpParser\\Node\\PropertyHook\0" /* 3992 */ - "getParameterAttributes\0" /* 4082 */ - "PhpParser\\Node\\Stmt\\Function_\0" /* 4105 */ - "pureUnlessCallableIsImpureParameters\0" /* 4135 */ - "pureUnlessParameterPassedParameters\0" /* 4172 */ - "enterFunction\0" /* 4208 */ - "functionReflection\0" /* 4222 */ - "preserveConstructorScope\0" /* 4241 */ - "enterFunctionLike\0" /* 4266 */ - "namespaceName\0" /* 4284 */ - "enterNamespace\0" /* 4298 */ - "thisType\0" /* 4313 */ - "nativeThisType\0" /* 4322 */ - "scopeClasses\0" /* 4337 */ - "enterClosureBind\0" /* 4350 */ - "originalScope\0" /* 4367 */ - "restoreOriginalScopeAfterClosureBind\0" /* 4381 */ - "restoreThisScope\0" /* 4418 */ - "restoreThis\0" /* 4435 */ - "enterClosureCall\0" /* 4447 */ - "isInClosureBind\0" /* 4464 */ - "withClosureBindScopeClasses\0" /* 4480 */ - "closure\0" /* 4508 */ - "PhpParser\\Node\\Expr\\Closure\0" /* 4516 */ - "callableParameters\0" /* 4544 */ - "nativeCallableParameters\0" /* 4563 */ - "enterAnonymousFunction\0" /* 4588 */ - "enterAnonymousFunctionWithoutReflection\0" /* 4611 */ - "typeHolder\0" /* 4651 */ - "PHPStan\\Analyser\\ExpressionTypeHolder\0" /* 4662 */ - "expressionTypeIsUnchangeable\0" /* 4700 */ - "invalidateStaticExpressions\0" /* 4729 */ - "arrowFunction\0" /* 4757 */ - "PhpParser\\Node\\Expr\\ArrowFunction\0" /* 4771 */ - "enterArrowFunction\0" /* 4805 */ - "enterArrowFunctionWithoutReflection\0" /* 4824 */ - "PhpParser\\Node\\Param\0" /* 4860 */ - "isParameterValueNullable\0" /* 4881 */ - "isNullable\0" /* 4906 */ - "isVariadic\0" /* 4917 */ - "getFunctionType\0" /* 4928 */ - "index\0" /* 4944 */ - "getCallableParameterType\0" /* 4950 */ - "startIndex\0" /* 4975 */ - "buildVariadicArrayTypeFromCallableParameters\0" /* 4986 */ - "nativeType\0" /* 5031 */ - "inferredType\0" /* 5042 */ - "intersectButNotNever\0" /* 5055 */ - "PhpParser\\Node\\Expr\\Match_\0" /* 5076 */ - "condType\0" /* 5103 */ - "condNativeType\0" /* 5112 */ - "enterMatch\0" /* 5127 */ - "iteratee\0" /* 5138 */ - "iterateeType\0" /* 5147 */ - "nativeIterateeType\0" /* 5160 */ - "valueName\0" /* 5179 */ - "keyName\0" /* 5189 */ - "valueByRef\0" /* 5197 */ - "enterForeach\0" /* 5208 */ - "enterForeachKey\0" /* 5221 */ - "catchType\0" /* 5237 */ - "enterCatchType\0" /* 5247 */ - "isPlainWrite\0" /* 5262 */ - "enterExpressionAssign\0" /* 5275 */ - "exitExpressionAssign\0" /* 5297 */ - "isInExpressionAssign\0" /* 5318 */ - "isInWriteExpressionAssign\0" /* 5339 */ - "setAllowedUndefinedExpression\0" /* 5365 */ - "unsetAllowedUndefinedExpression\0" /* 5395 */ - "isUndefinedExpressionAllowed\0" /* 5427 */ - "certainty\0" /* 5456 */ - "intertwinedPropagatedFrom\0" /* 5466 */ - "assignVariable\0" /* 5492 */ - "overwriteExpression\0" /* 5507 */ - "scope\0" /* 5527 */ - "rootType\0" /* 5533 */ - "assignedExpr\0" /* 5542 */ - "rootVariableName\0" /* 5555 */ - "native\0" /* 5572 */ - "resolveIntertwinedAssignedType\0" /* 5579 */ - "dimFetch\0" /* 5610 */ - "PhpParser\\Node\\Expr\\ArrayDimFetch\0" /* 5619 */ - "isDimFetchPathReachable\0" /* 5653 */ - "unsetExpression\0" /* 5677 */ - "getStateType\0" /* 5693 */ - "getScopeStateType\0" /* 5706 */ - "getScopeStateNativeType\0" /* 5724 */ - "resolveScopeStateType\0" /* 5748 */ - "specifyExpressionType\0" /* 5770 */ - "openSpecificationScope\0" /* 5792 */ - "isSpecifyExpressionTypeNoop\0" /* 5815 */ - "specifyExpressionTypeInPlace\0" /* 5843 */ - "assignExpression\0" /* 5872 */ - "fetchedOnType\0" /* 5889 */ - "assignInitializedProperty\0" /* 5903 */ - "expressionToInvalidate\0" /* 5929 */ - "requireMoreCharacters\0" /* 5952 */ - "invalidatingClass\0" /* 5974 */ - "keepPropertyFetches\0" /* 5992 */ - "invalidateExpression\0" /* 6012 */ - "isPrivatePropertyOfDifferentClass\0" /* 6033 */ - "invalidateMethodsOnExpression\0" /* 6067 */ - "setExpressionCertaintyKeepingType\0" /* 6097 */ - "isComplexUnionType\0" /* 6131 */ - "addTypeToExpression\0" /* 6150 */ - "typeToRemove\0" /* 6170 */ - "removeTypeFromExpression\0" /* 6183 */ - "filterByTruthyValue\0" /* 6208 */ - "filterByFalseyValue\0" /* 6228 */ - "specifiedTypes\0" /* 6248 */ - "applySpecifiedTypes\0" /* 6263 */ - "specifiedExpressions\0" /* 6283 */ - "processConditionalExpressionsAfterSpecifying\0" /* 6304 */ - "getConditionalExpressions\0" /* 6349 */ - "conditionalExpressionHolders\0" /* 6375 */ - "addConditionalExpressions\0" /* 6404 */ - "exitFirstLevelStatements\0" /* 6430 */ - "isInFirstLevelStatement\0" /* 6455 */ - "otherScope\0" /* 6479 */ - "preserveVacuousConditionals\0" /* 6490 */ - "mergeWith\0" /* 6518 */ - "ours\0" /* 6528 */ - "theirs\0" /* 6533 */ - "collectAbsorbedClosures\0" /* 6540 */ - "mergeWithVariableState\0" /* 6564 */ - "differingExpressionKeys\0" /* 6587 */ - "ourExpressionTypes\0" /* 6611 */ - "theirExpressionTypes\0" /* 6630 */ - "withoutPreciseClassConstantFetches\0" /* 6651 */ - "currentConditionalExpressions\0" /* 6686 */ - "sourceConditionalExpressions\0" /* 6716 */ - "otherExpressionTypes\0" /* 6745 */ - "preserveVacuousConditionalExpressions\0" /* 6766 */ - "ourConditionalExpressions\0" /* 6804 */ - "theirConditionalExpressions\0" /* 6830 */ - "mergeSameGuardConditionalExpressions\0" /* 6858 */ - "newConditionalExpressions\0" /* 6895 */ - "existingConditionalExpressions\0" /* 6921 */ - "mergeConditionalExpressions\0" /* 6952 */ - "calledMethodScope\0" /* 6980 */ - "mergeInitializedProperties\0" /* 6998 */ - "finallyScope\0" /* 7025 */ - "originalFinallyScope\0" /* 7038 */ - "processFinallyScope\0" /* 7059 */ - "ourVariableTypeHolders\0" /* 7079 */ - "finallyVariableTypeHolders\0" /* 7102 */ - "originalVariableTypeHolders\0" /* 7129 */ - "processFinallyScopeVariableTypeHolders\0" /* 7157 */ - "closureScope\0" /* 7196 */ - "prevScope\0" /* 7209 */ - "byRefUses\0" /* 7219 */ - "processClosureScope\0" /* 7229 */ - "finalScope\0" /* 7249 */ - "processAlwaysIterableForeachScopeWithoutPollute\0" /* 7260 */ - "writableVariableNames\0" /* 7308 */ - "generalizeWith\0" /* 7330 */ - "generalizeWithVariableState\0" /* 7345 */ - "variableTypeHolders\0" /* 7373 */ - "otherVariableTypeHolders\0" /* 7393 */ - "generalizeVariableTypeHolders\0" /* 7418 */ - "flattenUnionForGeneralization\0" /* 7448 */ - "a\0" /* 7478 */ - "b\0" /* 7480 */ - "depth\0" /* 7482 */ - "generalizeType\0" /* 7488 */ - "getArrayDepth\0" /* 7503 */ - "equals\0" /* 7517 */ - "otherConditionalExpressions\0" /* 7524 */ - "compareConditionalExpressions\0" /* 7552 */ - "compareVariableTypeHolders\0" /* 7582 */ - "propertyReflection\0" /* 7609 */ - "PHPStan\\Reflection\\PropertyReflection\0" /* 7628 */ - "canAccessProperty\0" /* 7666 */ - "PHPStan\\Reflection\\ExtendedPropertyReflection\0" /* 7684 */ - "canReadProperty\0" /* 7730 */ - "canWriteProperty\0" /* 7746 */ - "methodReflection\0" /* 7763 */ - "PHPStan\\Reflection\\MethodReflection\0" /* 7780 */ - "canCallMethod\0" /* 7816 */ - "constantReflection\0" /* 7830 */ - "PHPStan\\Reflection\\ClassConstantReflection\0" /* 7849 */ - "canAccessConstant\0" /* 7892 */ - "classMemberReflection\0" /* 7910 */ - "PHPStan\\Reflection\\ClassMemberReflection\0" /* 7932 */ - "canAccessClassMember\0" /* 7973 */ - "debug\0" /* 7994 */ - "typeWithMethod\0" /* 8000 */ - "methodName\0" /* 8015 */ - "filterTypeWithMethod\0" /* 8026 */ - "PHPStan\\Reflection\\ExtendedMethodReflection\0" /* 8047 */ - "getMethodReflection\0" /* 8091 */ - "getNakedMethod\0" /* 8111 */ - "typeWithProperty\0" /* 8126 */ - "getPropertyReflection\0" /* 8143 */ - "getInstancePropertyReflection\0" /* 8165 */ - "getStaticPropertyReflection\0" /* 8195 */ - "typeWithConstant\0" /* 8223 */ - "constantName\0" /* 8240 */ - "getConstantReflection\0" /* 8253 */ - "constantType\0" /* 8275 */ - "getConstantExplicitTypeFromConfig\0" /* 8288 */ - "getConstantTypes\0" /* 8322 */ - "getGlobalConstantType\0" /* 8339 */ - "nameString\0" /* 8361 */ - "createGlobalConstantFetches\0" /* 8372 */ - "getNativeConstantTypes\0" /* 8400 */ - "getIterableKeyType\0" /* 8423 */ - "getIterableValueType\0" /* 8442 */ - "PHPStan\\Php\\PhpVersions\0" /* 8463 */ - "getPhpVersion\0" /* 8487 */ - "getConfiguredPhpVersionRange\0" /* 8501 */ - "isOverallPhpVersionRange\0" /* 8530 */ - "PhpParser\\Node\0" /* 8555 */ - "invokeNodeCallback\0" /* 8570 */ - "collectorType\0" /* 8589 */ - "data\0" /* 8603 */ - "emitCollectedData\0" /* 8608 */ - "extensionClass\0" /* 8626 */ - "trackValueDependency\0" /* 8641 */ - "file\0" /* 8662 */ - "trackFileDependency\0" /* 8667 */ - "directory\0" /* 8687 */ - "pattern\0" /* 8697 */ - "'*'\0" /* 8705 */ - "trackDirectoryDependency\0" /* 8709 */ - "trackClassDependency"; /* 8734 */ + "scope\0" /* 2977 */ + "withFunctionCallStackOf\0" /* 2983 */ + "className\0" /* 3007 */ + "isInClassExists\0" /* 3017 */ + "getFunctionCallStack\0" /* 3033 */ + "getFunctionCallStackWithParameters\0" /* 3054 */ + "functionName\0" /* 3089 */ + "isInFunctionExists\0" /* 3102 */ + "classReflection\0" /* 3121 */ + "enterClass\0" /* 3137 */ + "traitReflection\0" /* 3148 */ + "enterTrait\0" /* 3164 */ + "classMethod\0" /* 3175 */ + "PhpParser\\Node\\Stmt\\ClassMethod\0" /* 3187 */ + "templateTypeMap\0" /* 3219 */ + "PHPStan\\Type\\Generic\\TemplateTypeMap\0" /* 3235 */ + "phpDocParameterTypes\0" /* 3272 */ + "phpDocReturnType\0" /* 3293 */ + "throwType\0" /* 3310 */ + "deprecatedDescription\0" /* 3320 */ + "isDeprecated\0" /* 3342 */ + "isInternal\0" /* 3355 */ + "isFinal\0" /* 3366 */ + "isPure\0" /* 3374 */ + "acceptsNamedArguments\0" /* 3381 */ + "asserts\0" /* 3403 */ + "PHPStan\\Reflection\\Assertions\0" /* 3411 */ + "selfOutType\0" /* 3441 */ + "phpDocComment\0" /* 3453 */ + "parameterOutTypes\0" /* 3467 */ + "immediatelyInvokedCallableParameters\0" /* 3485 */ + "phpDocClosureThisTypeParameters\0" /* 3522 */ + "isConstructor\0" /* 3554 */ + "resolvedPhpDocBlock\0" /* 3568 */ + "PHPStan\\PhpDoc\\ResolvedPhpDocBlock\0" /* 3588 */ + "phpDocPureUnlessCallableIsImpureParameters\0" /* 3623 */ + "phpDocPureUnlessParameterPassedParameters\0" /* 3666 */ + "enterClassMethod\0" /* 3708 */ + "hook\0" /* 3725 */ + "PhpParser\\Node\\PropertyHook\0" /* 3730 */ + "propertyName\0" /* 3758 */ + "nativePropertyTypeNode\0" /* 3771 */ + "PhpParser\\Node\\Identifier|PhpParser\\Node\\Name|PhpParser\\Node\\ComplexType\0" /* 3794 */ + "phpDocPropertyType\0" /* 3867 */ + "enterPropertyHook\0" /* 3886 */ + "type\0" /* 3904 */ + "transformStaticType\0" /* 3909 */ + "functionLike\0" /* 3929 */ + "PhpParser\\Node\\FunctionLike\0" /* 3942 */ + "getRealParameterTypes\0" /* 3970 */ + "getRealParameterDefaultValues\0" /* 3992 */ + "PhpParser\\Node\\Stmt\\ClassMethod|PhpParser\\Node\\Stmt\\Function_|PhpParser\\Node\\PropertyHook\0" /* 4022 */ + "getParameterAttributes\0" /* 4112 */ + "PhpParser\\Node\\Stmt\\Function_\0" /* 4135 */ + "pureUnlessCallableIsImpureParameters\0" /* 4165 */ + "pureUnlessParameterPassedParameters\0" /* 4202 */ + "enterFunction\0" /* 4238 */ + "functionReflection\0" /* 4252 */ + "preserveConstructorScope\0" /* 4271 */ + "enterFunctionLike\0" /* 4296 */ + "namespaceName\0" /* 4314 */ + "enterNamespace\0" /* 4328 */ + "thisType\0" /* 4343 */ + "nativeThisType\0" /* 4352 */ + "scopeClasses\0" /* 4367 */ + "enterClosureBind\0" /* 4380 */ + "originalScope\0" /* 4397 */ + "restoreOriginalScopeAfterClosureBind\0" /* 4411 */ + "restoreThisScope\0" /* 4448 */ + "restoreThis\0" /* 4465 */ + "enterClosureCall\0" /* 4477 */ + "isInClosureBind\0" /* 4494 */ + "withClosureBindScopeClasses\0" /* 4510 */ + "closure\0" /* 4538 */ + "PhpParser\\Node\\Expr\\Closure\0" /* 4546 */ + "callableParameters\0" /* 4574 */ + "nativeCallableParameters\0" /* 4593 */ + "enterAnonymousFunction\0" /* 4618 */ + "enterAnonymousFunctionWithoutReflection\0" /* 4641 */ + "typeHolder\0" /* 4681 */ + "PHPStan\\Analyser\\ExpressionTypeHolder\0" /* 4692 */ + "expressionTypeIsUnchangeable\0" /* 4730 */ + "invalidateStaticExpressions\0" /* 4759 */ + "arrowFunction\0" /* 4787 */ + "PhpParser\\Node\\Expr\\ArrowFunction\0" /* 4801 */ + "enterArrowFunction\0" /* 4835 */ + "enterArrowFunctionWithoutReflection\0" /* 4854 */ + "PhpParser\\Node\\Param\0" /* 4890 */ + "isParameterValueNullable\0" /* 4911 */ + "isNullable\0" /* 4936 */ + "isVariadic\0" /* 4947 */ + "getFunctionType\0" /* 4958 */ + "index\0" /* 4974 */ + "getCallableParameterType\0" /* 4980 */ + "startIndex\0" /* 5005 */ + "buildVariadicArrayTypeFromCallableParameters\0" /* 5016 */ + "nativeType\0" /* 5061 */ + "inferredType\0" /* 5072 */ + "intersectButNotNever\0" /* 5085 */ + "PhpParser\\Node\\Expr\\Match_\0" /* 5106 */ + "condType\0" /* 5133 */ + "condNativeType\0" /* 5142 */ + "enterMatch\0" /* 5157 */ + "iteratee\0" /* 5168 */ + "iterateeType\0" /* 5177 */ + "nativeIterateeType\0" /* 5190 */ + "valueName\0" /* 5209 */ + "keyName\0" /* 5219 */ + "valueByRef\0" /* 5227 */ + "enterForeach\0" /* 5238 */ + "enterForeachKey\0" /* 5251 */ + "catchType\0" /* 5267 */ + "enterCatchType\0" /* 5277 */ + "isPlainWrite\0" /* 5292 */ + "enterExpressionAssign\0" /* 5305 */ + "exitExpressionAssign\0" /* 5327 */ + "isInExpressionAssign\0" /* 5348 */ + "isInWriteExpressionAssign\0" /* 5369 */ + "setAllowedUndefinedExpression\0" /* 5395 */ + "unsetAllowedUndefinedExpression\0" /* 5425 */ + "isUndefinedExpressionAllowed\0" /* 5457 */ + "certainty\0" /* 5486 */ + "intertwinedPropagatedFrom\0" /* 5496 */ + "assignVariable\0" /* 5522 */ + "overwriteExpression\0" /* 5537 */ + "rootType\0" /* 5557 */ + "assignedExpr\0" /* 5566 */ + "rootVariableName\0" /* 5579 */ + "native\0" /* 5596 */ + "resolveIntertwinedAssignedType\0" /* 5603 */ + "dimFetch\0" /* 5634 */ + "PhpParser\\Node\\Expr\\ArrayDimFetch\0" /* 5643 */ + "isDimFetchPathReachable\0" /* 5677 */ + "unsetExpression\0" /* 5701 */ + "getStateType\0" /* 5717 */ + "getScopeStateType\0" /* 5730 */ + "getScopeStateNativeType\0" /* 5748 */ + "resolveScopeStateType\0" /* 5772 */ + "specifyExpressionType\0" /* 5794 */ + "openSpecificationScope\0" /* 5816 */ + "isSpecifyExpressionTypeNoop\0" /* 5839 */ + "specifyExpressionTypeInPlace\0" /* 5867 */ + "assignExpression\0" /* 5896 */ + "fetchedOnType\0" /* 5913 */ + "assignInitializedProperty\0" /* 5927 */ + "expressionToInvalidate\0" /* 5953 */ + "requireMoreCharacters\0" /* 5976 */ + "invalidatingClass\0" /* 5998 */ + "keepPropertyFetches\0" /* 6016 */ + "invalidateExpression\0" /* 6036 */ + "isPrivatePropertyOfDifferentClass\0" /* 6057 */ + "invalidateMethodsOnExpression\0" /* 6091 */ + "setExpressionCertaintyKeepingType\0" /* 6121 */ + "isComplexUnionType\0" /* 6155 */ + "addTypeToExpression\0" /* 6174 */ + "typeToRemove\0" /* 6194 */ + "removeTypeFromExpression\0" /* 6207 */ + "filterByTruthyValue\0" /* 6232 */ + "filterByFalseyValue\0" /* 6252 */ + "specifiedTypes\0" /* 6272 */ + "applySpecifiedTypes\0" /* 6287 */ + "specifiedExpressions\0" /* 6307 */ + "processConditionalExpressionsAfterSpecifying\0" /* 6328 */ + "getConditionalExpressions\0" /* 6373 */ + "conditionalExpressionHolders\0" /* 6399 */ + "addConditionalExpressions\0" /* 6428 */ + "exitFirstLevelStatements\0" /* 6454 */ + "isInFirstLevelStatement\0" /* 6479 */ + "otherScope\0" /* 6503 */ + "preserveVacuousConditionals\0" /* 6514 */ + "mergeWith\0" /* 6542 */ + "ours\0" /* 6552 */ + "theirs\0" /* 6557 */ + "collectAbsorbedClosures\0" /* 6564 */ + "mergeWithVariableState\0" /* 6588 */ + "differingExpressionKeys\0" /* 6611 */ + "ourExpressionTypes\0" /* 6635 */ + "theirExpressionTypes\0" /* 6654 */ + "withoutPreciseClassConstantFetches\0" /* 6675 */ + "currentConditionalExpressions\0" /* 6710 */ + "sourceConditionalExpressions\0" /* 6740 */ + "otherExpressionTypes\0" /* 6769 */ + "preserveVacuousConditionalExpressions\0" /* 6790 */ + "ourConditionalExpressions\0" /* 6828 */ + "theirConditionalExpressions\0" /* 6854 */ + "mergeSameGuardConditionalExpressions\0" /* 6882 */ + "newConditionalExpressions\0" /* 6919 */ + "existingConditionalExpressions\0" /* 6945 */ + "mergeConditionalExpressions\0" /* 6976 */ + "calledMethodScope\0" /* 7004 */ + "mergeInitializedProperties\0" /* 7022 */ + "finallyScope\0" /* 7049 */ + "originalFinallyScope\0" /* 7062 */ + "processFinallyScope\0" /* 7083 */ + "ourVariableTypeHolders\0" /* 7103 */ + "finallyVariableTypeHolders\0" /* 7126 */ + "originalVariableTypeHolders\0" /* 7153 */ + "processFinallyScopeVariableTypeHolders\0" /* 7181 */ + "closureScope\0" /* 7220 */ + "prevScope\0" /* 7233 */ + "byRefUses\0" /* 7243 */ + "processClosureScope\0" /* 7253 */ + "finalScope\0" /* 7273 */ + "processAlwaysIterableForeachScopeWithoutPollute\0" /* 7284 */ + "writableVariableNames\0" /* 7332 */ + "generalizeWith\0" /* 7354 */ + "generalizeWithVariableState\0" /* 7369 */ + "variableTypeHolders\0" /* 7397 */ + "otherVariableTypeHolders\0" /* 7417 */ + "generalizeVariableTypeHolders\0" /* 7442 */ + "flattenUnionForGeneralization\0" /* 7472 */ + "a\0" /* 7502 */ + "b\0" /* 7504 */ + "depth\0" /* 7506 */ + "generalizeType\0" /* 7512 */ + "getArrayDepth\0" /* 7527 */ + "equals\0" /* 7541 */ + "otherConditionalExpressions\0" /* 7548 */ + "compareConditionalExpressions\0" /* 7576 */ + "compareVariableTypeHolders\0" /* 7606 */ + "propertyReflection\0" /* 7633 */ + "PHPStan\\Reflection\\PropertyReflection\0" /* 7652 */ + "canAccessProperty\0" /* 7690 */ + "PHPStan\\Reflection\\ExtendedPropertyReflection\0" /* 7708 */ + "canReadProperty\0" /* 7754 */ + "canWriteProperty\0" /* 7770 */ + "methodReflection\0" /* 7787 */ + "PHPStan\\Reflection\\MethodReflection\0" /* 7804 */ + "canCallMethod\0" /* 7840 */ + "constantReflection\0" /* 7854 */ + "PHPStan\\Reflection\\ClassConstantReflection\0" /* 7873 */ + "canAccessConstant\0" /* 7916 */ + "classMemberReflection\0" /* 7934 */ + "PHPStan\\Reflection\\ClassMemberReflection\0" /* 7956 */ + "canAccessClassMember\0" /* 7997 */ + "debug\0" /* 8018 */ + "typeWithMethod\0" /* 8024 */ + "methodName\0" /* 8039 */ + "filterTypeWithMethod\0" /* 8050 */ + "PHPStan\\Reflection\\ExtendedMethodReflection\0" /* 8071 */ + "getMethodReflection\0" /* 8115 */ + "getNakedMethod\0" /* 8135 */ + "typeWithProperty\0" /* 8150 */ + "getPropertyReflection\0" /* 8167 */ + "getInstancePropertyReflection\0" /* 8189 */ + "getStaticPropertyReflection\0" /* 8219 */ + "typeWithConstant\0" /* 8247 */ + "constantName\0" /* 8264 */ + "getConstantReflection\0" /* 8277 */ + "constantType\0" /* 8299 */ + "getConstantExplicitTypeFromConfig\0" /* 8312 */ + "getConstantTypes\0" /* 8346 */ + "getGlobalConstantType\0" /* 8363 */ + "nameString\0" /* 8385 */ + "createGlobalConstantFetches\0" /* 8396 */ + "getNativeConstantTypes\0" /* 8424 */ + "getIterableKeyType\0" /* 8447 */ + "getIterableValueType\0" /* 8466 */ + "PHPStan\\Php\\PhpVersions\0" /* 8487 */ + "getPhpVersion\0" /* 8511 */ + "getConfiguredPhpVersionRange\0" /* 8525 */ + "isOverallPhpVersionRange\0" /* 8554 */ + "PhpParser\\Node\0" /* 8579 */ + "invokeNodeCallback\0" /* 8594 */ + "collectorType\0" /* 8613 */ + "data\0" /* 8627 */ + "emitCollectedData\0" /* 8632 */ + "extensionClass\0" /* 8650 */ + "trackValueDependency\0" /* 8665 */ + "file\0" /* 8686 */ + "trackFileDependency\0" /* 8691 */ + "directory\0" /* 8711 */ + "pattern\0" /* 8721 */ + "'*'\0" /* 8729 */ + "trackDirectoryDependency\0" /* 8733 */ + "trackClassDependency"; /* 8758 */ inline constexpr reg::PackedArg args[] = { reg::packed(0, 0, 9), /* __construct $services */ reg::packed(40, 0, 53), /* __construct $scopeFactory */ @@ -643,154 +644,156 @@ inline constexpr reg::PackedArg args[] = { reg::packed(2926, MAY_BE_BOOL), /* pushInFunctionCall $rememberTypes */ reg::packed(738, 0, 523), /* pushInFunctionCall return */ reg::packed(738, 0, 523), /* popInFunctionCall return */ - reg::packed(2977, MAY_BE_STRING), /* isInClassExists $className */ + reg::packed(2977, 0, 523), /* withFunctionCallStackOf $scope */ + reg::packed(738, 0, 523), /* withFunctionCallStackOf return */ + reg::packed(3007, MAY_BE_STRING), /* isInClassExists $className */ reg::packed(738, MAY_BE_BOOL), /* isInClassExists return */ reg::packed(738, MAY_BE_ARRAY), /* getFunctionCallStack return */ reg::packed(738, MAY_BE_ARRAY), /* getFunctionCallStackWithParameters return */ - reg::packed(3059, MAY_BE_STRING), /* isInFunctionExists $functionName */ + reg::packed(3089, MAY_BE_STRING), /* isInFunctionExists $functionName */ reg::packed(738, MAY_BE_BOOL), /* isInFunctionExists return */ - reg::packed(3091, 0, 1065), /* enterClass $classReflection */ + reg::packed(3121, 0, 1065), /* enterClass $classReflection */ reg::packed(738, 0, 523), /* enterClass return */ - reg::packed(3118, 0, 1065), /* enterTrait $traitReflection */ + reg::packed(3148, 0, 1065), /* enterTrait $traitReflection */ reg::packed(738, 0, 523), /* enterTrait return */ - reg::packed(3145, 0, 3157), /* enterClassMethod $classMethod */ - reg::packed(3189, 0, 3205), /* enterClassMethod $templateTypeMap */ - reg::packed(3242, MAY_BE_ARRAY), /* enterClassMethod $phpDocParameterTypes */ - reg::packed(3263, MAY_BE_NULL, 1424), /* enterClassMethod $phpDocReturnType */ - reg::packed(3280, MAY_BE_NULL, 1424), /* enterClassMethod $throwType */ - reg::packed(3290, MAY_BE_NULL | MAY_BE_STRING), /* enterClassMethod $deprecatedDescription */ - reg::packed(3312, MAY_BE_BOOL), /* enterClassMethod $isDeprecated */ - reg::packed(3325, MAY_BE_BOOL), /* enterClassMethod $isInternal */ - reg::packed(3336, MAY_BE_BOOL), /* enterClassMethod $isFinal */ - reg::packed(3344, MAY_BE_NULL | MAY_BE_BOOL, reg::NoString, false, false, 222), /* enterClassMethod $isPure */ - reg::packed(3351, MAY_BE_BOOL, reg::NoString, false, false, 402), /* enterClassMethod $acceptsNamedArguments */ - reg::packed(3373, MAY_BE_NULL, 3381, false, false, 222), /* enterClassMethod $asserts */ - reg::packed(3411, MAY_BE_NULL, 1424, false, false, 222), /* enterClassMethod $selfOutType */ - reg::packed(3423, MAY_BE_NULL | MAY_BE_STRING, reg::NoString, false, false, 222), /* enterClassMethod $phpDocComment */ - reg::packed(3437, MAY_BE_ARRAY, reg::NoString, false, false, 253), /* enterClassMethod $parameterOutTypes */ - reg::packed(3455, MAY_BE_ARRAY, reg::NoString, false, false, 253), /* enterClassMethod $immediatelyInvokedCallableParameters */ - reg::packed(3492, MAY_BE_ARRAY, reg::NoString, false, false, 253), /* enterClassMethod $phpDocClosureThisTypeParameters */ - reg::packed(3524, MAY_BE_BOOL, reg::NoString, false, false, 148), /* enterClassMethod $isConstructor */ - reg::packed(3538, MAY_BE_NULL, 3558, false, false, 222), /* enterClassMethod $resolvedPhpDocBlock */ - reg::packed(3593, MAY_BE_ARRAY, reg::NoString, false, false, 253), /* enterClassMethod $phpDocPureUnlessCallableIsImpureParameters */ - reg::packed(3636, MAY_BE_ARRAY, reg::NoString, false, false, 253), /* enterClassMethod $phpDocPureUnlessParameterPassedParameters */ + reg::packed(3175, 0, 3187), /* enterClassMethod $classMethod */ + reg::packed(3219, 0, 3235), /* enterClassMethod $templateTypeMap */ + reg::packed(3272, MAY_BE_ARRAY), /* enterClassMethod $phpDocParameterTypes */ + reg::packed(3293, MAY_BE_NULL, 1424), /* enterClassMethod $phpDocReturnType */ + reg::packed(3310, MAY_BE_NULL, 1424), /* enterClassMethod $throwType */ + reg::packed(3320, MAY_BE_NULL | MAY_BE_STRING), /* enterClassMethod $deprecatedDescription */ + reg::packed(3342, MAY_BE_BOOL), /* enterClassMethod $isDeprecated */ + reg::packed(3355, MAY_BE_BOOL), /* enterClassMethod $isInternal */ + reg::packed(3366, MAY_BE_BOOL), /* enterClassMethod $isFinal */ + reg::packed(3374, MAY_BE_NULL | MAY_BE_BOOL, reg::NoString, false, false, 222), /* enterClassMethod $isPure */ + reg::packed(3381, MAY_BE_BOOL, reg::NoString, false, false, 402), /* enterClassMethod $acceptsNamedArguments */ + reg::packed(3403, MAY_BE_NULL, 3411, false, false, 222), /* enterClassMethod $asserts */ + reg::packed(3441, MAY_BE_NULL, 1424, false, false, 222), /* enterClassMethod $selfOutType */ + reg::packed(3453, MAY_BE_NULL | MAY_BE_STRING, reg::NoString, false, false, 222), /* enterClassMethod $phpDocComment */ + reg::packed(3467, MAY_BE_ARRAY, reg::NoString, false, false, 253), /* enterClassMethod $parameterOutTypes */ + reg::packed(3485, MAY_BE_ARRAY, reg::NoString, false, false, 253), /* enterClassMethod $immediatelyInvokedCallableParameters */ + reg::packed(3522, MAY_BE_ARRAY, reg::NoString, false, false, 253), /* enterClassMethod $phpDocClosureThisTypeParameters */ + reg::packed(3554, MAY_BE_BOOL, reg::NoString, false, false, 148), /* enterClassMethod $isConstructor */ + reg::packed(3568, MAY_BE_NULL, 3588, false, false, 222), /* enterClassMethod $resolvedPhpDocBlock */ + reg::packed(3623, MAY_BE_ARRAY, reg::NoString, false, false, 253), /* enterClassMethod $phpDocPureUnlessCallableIsImpureParameters */ + reg::packed(3666, MAY_BE_ARRAY, reg::NoString, false, false, 253), /* enterClassMethod $phpDocPureUnlessParameterPassedParameters */ reg::packed(738, 0, 523), /* enterClassMethod return */ - reg::packed(3695, 0, 3700), /* enterPropertyHook $hook */ - reg::packed(3728, MAY_BE_STRING), /* enterPropertyHook $propertyName */ - reg::packed(3741, MAY_BE_NULL, 3764), /* enterPropertyHook $nativePropertyTypeNode */ - reg::packed(3837, MAY_BE_NULL, 1424), /* enterPropertyHook $phpDocPropertyType */ - reg::packed(3242, MAY_BE_ARRAY), /* enterPropertyHook $phpDocParameterTypes */ - reg::packed(3280, MAY_BE_NULL, 1424), /* enterPropertyHook $throwType */ - reg::packed(3290, MAY_BE_NULL | MAY_BE_STRING), /* enterPropertyHook $deprecatedDescription */ - reg::packed(3312, MAY_BE_BOOL), /* enterPropertyHook $isDeprecated */ - reg::packed(3344, MAY_BE_NULL | MAY_BE_BOOL), /* enterPropertyHook $isPure */ - reg::packed(3423, MAY_BE_NULL | MAY_BE_STRING), /* enterPropertyHook $phpDocComment */ - reg::packed(3538, MAY_BE_NULL, 3558, false, false, 222), /* enterPropertyHook $resolvedPhpDocBlock */ + reg::packed(3725, 0, 3730), /* enterPropertyHook $hook */ + reg::packed(3758, MAY_BE_STRING), /* enterPropertyHook $propertyName */ + reg::packed(3771, MAY_BE_NULL, 3794), /* enterPropertyHook $nativePropertyTypeNode */ + reg::packed(3867, MAY_BE_NULL, 1424), /* enterPropertyHook $phpDocPropertyType */ + reg::packed(3272, MAY_BE_ARRAY), /* enterPropertyHook $phpDocParameterTypes */ + reg::packed(3310, MAY_BE_NULL, 1424), /* enterPropertyHook $throwType */ + reg::packed(3320, MAY_BE_NULL | MAY_BE_STRING), /* enterPropertyHook $deprecatedDescription */ + reg::packed(3342, MAY_BE_BOOL), /* enterPropertyHook $isDeprecated */ + reg::packed(3374, MAY_BE_NULL | MAY_BE_BOOL), /* enterPropertyHook $isPure */ + reg::packed(3453, MAY_BE_NULL | MAY_BE_STRING), /* enterPropertyHook $phpDocComment */ + reg::packed(3568, MAY_BE_NULL, 3588, false, false, 222), /* enterPropertyHook $resolvedPhpDocBlock */ reg::packed(738, 0, 523), /* enterPropertyHook return */ - reg::packed(3874, 0, 1424), /* transformStaticType $type */ + reg::packed(3904, 0, 1424), /* transformStaticType $type */ reg::packed(738, 0, 1424), /* transformStaticType return */ - reg::packed(3899, 0, 3912), /* getRealParameterTypes $functionLike */ + reg::packed(3929, 0, 3942), /* getRealParameterTypes $functionLike */ reg::packed(738, MAY_BE_ARRAY), /* getRealParameterTypes return */ - reg::packed(3899, 0, 3912), /* getRealParameterDefaultValues $functionLike */ + reg::packed(3929, 0, 3942), /* getRealParameterDefaultValues $functionLike */ reg::packed(738, MAY_BE_ARRAY), /* getRealParameterDefaultValues return */ - reg::packed(3899, 0, 3992), /* getParameterAttributes $functionLike */ + reg::packed(3929, 0, 4022), /* getParameterAttributes $functionLike */ reg::packed(738, MAY_BE_ARRAY), /* getParameterAttributes return */ - reg::packed(154, 0, 4105), /* enterFunction $function */ - reg::packed(3189, 0, 3205), /* enterFunction $templateTypeMap */ - reg::packed(3242, MAY_BE_ARRAY), /* enterFunction $phpDocParameterTypes */ - reg::packed(3263, MAY_BE_NULL, 1424), /* enterFunction $phpDocReturnType */ - reg::packed(3280, MAY_BE_NULL, 1424), /* enterFunction $throwType */ - reg::packed(3290, MAY_BE_NULL | MAY_BE_STRING), /* enterFunction $deprecatedDescription */ - reg::packed(3312, MAY_BE_BOOL), /* enterFunction $isDeprecated */ - reg::packed(3325, MAY_BE_BOOL), /* enterFunction $isInternal */ - reg::packed(3344, MAY_BE_NULL | MAY_BE_BOOL, reg::NoString, false, false, 222), /* enterFunction $isPure */ - reg::packed(3351, MAY_BE_BOOL, reg::NoString, false, false, 402), /* enterFunction $acceptsNamedArguments */ - reg::packed(3373, MAY_BE_NULL, 3381, false, false, 222), /* enterFunction $asserts */ - reg::packed(3423, MAY_BE_NULL | MAY_BE_STRING, reg::NoString, false, false, 222), /* enterFunction $phpDocComment */ - reg::packed(3437, MAY_BE_ARRAY, reg::NoString, false, false, 253), /* enterFunction $parameterOutTypes */ - reg::packed(3455, MAY_BE_ARRAY, reg::NoString, false, false, 253), /* enterFunction $immediatelyInvokedCallableParameters */ - reg::packed(3492, MAY_BE_ARRAY, reg::NoString, false, false, 253), /* enterFunction $phpDocClosureThisTypeParameters */ - reg::packed(4135, MAY_BE_ARRAY, reg::NoString, false, false, 253), /* enterFunction $pureUnlessCallableIsImpureParameters */ - reg::packed(4172, MAY_BE_ARRAY, reg::NoString, false, false, 253), /* enterFunction $pureUnlessParameterPassedParameters */ + reg::packed(154, 0, 4135), /* enterFunction $function */ + reg::packed(3219, 0, 3235), /* enterFunction $templateTypeMap */ + reg::packed(3272, MAY_BE_ARRAY), /* enterFunction $phpDocParameterTypes */ + reg::packed(3293, MAY_BE_NULL, 1424), /* enterFunction $phpDocReturnType */ + reg::packed(3310, MAY_BE_NULL, 1424), /* enterFunction $throwType */ + reg::packed(3320, MAY_BE_NULL | MAY_BE_STRING), /* enterFunction $deprecatedDescription */ + reg::packed(3342, MAY_BE_BOOL), /* enterFunction $isDeprecated */ + reg::packed(3355, MAY_BE_BOOL), /* enterFunction $isInternal */ + reg::packed(3374, MAY_BE_NULL | MAY_BE_BOOL, reg::NoString, false, false, 222), /* enterFunction $isPure */ + reg::packed(3381, MAY_BE_BOOL, reg::NoString, false, false, 402), /* enterFunction $acceptsNamedArguments */ + reg::packed(3403, MAY_BE_NULL, 3411, false, false, 222), /* enterFunction $asserts */ + reg::packed(3453, MAY_BE_NULL | MAY_BE_STRING, reg::NoString, false, false, 222), /* enterFunction $phpDocComment */ + reg::packed(3467, MAY_BE_ARRAY, reg::NoString, false, false, 253), /* enterFunction $parameterOutTypes */ + reg::packed(3485, MAY_BE_ARRAY, reg::NoString, false, false, 253), /* enterFunction $immediatelyInvokedCallableParameters */ + reg::packed(3522, MAY_BE_ARRAY, reg::NoString, false, false, 253), /* enterFunction $phpDocClosureThisTypeParameters */ + reg::packed(4165, MAY_BE_ARRAY, reg::NoString, false, false, 253), /* enterFunction $pureUnlessCallableIsImpureParameters */ + reg::packed(4202, MAY_BE_ARRAY, reg::NoString, false, false, 253), /* enterFunction $pureUnlessParameterPassedParameters */ reg::packed(738, 0, 523), /* enterFunction return */ - reg::packed(4222, 0, 163), /* enterFunctionLike $functionReflection */ - reg::packed(4241, MAY_BE_BOOL), /* enterFunctionLike $preserveConstructorScope */ + reg::packed(4252, 0, 163), /* enterFunctionLike $functionReflection */ + reg::packed(4271, MAY_BE_BOOL), /* enterFunctionLike $preserveConstructorScope */ reg::packed(738, 0, 523), /* enterFunctionLike return */ - reg::packed(4284, MAY_BE_STRING), /* enterNamespace $namespaceName */ + reg::packed(4314, MAY_BE_STRING), /* enterNamespace $namespaceName */ reg::packed(738, 0, 523), /* enterNamespace return */ - reg::packed(4313, MAY_BE_NULL, 1424), /* enterClosureBind $thisType */ - reg::packed(4322, MAY_BE_NULL, 1424), /* enterClosureBind $nativeThisType */ - reg::packed(4337, MAY_BE_ARRAY), /* enterClosureBind $scopeClasses */ + reg::packed(4343, MAY_BE_NULL, 1424), /* enterClosureBind $thisType */ + reg::packed(4352, MAY_BE_NULL, 1424), /* enterClosureBind $nativeThisType */ + reg::packed(4367, MAY_BE_ARRAY), /* enterClosureBind $scopeClasses */ reg::packed(738, 0, 523), /* enterClosureBind return */ - reg::packed(4367, 0, 523), /* restoreOriginalScopeAfterClosureBind $originalScope */ + reg::packed(4397, 0, 523), /* restoreOriginalScopeAfterClosureBind $originalScope */ reg::packed(738, 0, 523), /* restoreOriginalScopeAfterClosureBind return */ - reg::packed(4418, 0, 523), /* restoreThis $restoreThisScope */ + reg::packed(4448, 0, 523), /* restoreThis $restoreThisScope */ reg::packed(738, 0, 523), /* restoreThis return */ - reg::packed(4313, 0, 1424), /* enterClosureCall $thisType */ - reg::packed(4322, 0, 1424), /* enterClosureCall $nativeThisType */ + reg::packed(4343, 0, 1424), /* enterClosureCall $thisType */ + reg::packed(4352, 0, 1424), /* enterClosureCall $nativeThisType */ reg::packed(738, 0, 523), /* enterClosureCall return */ reg::packed(738, MAY_BE_BOOL), /* isInClosureBind return */ - reg::packed(4337, MAY_BE_ARRAY), /* withClosureBindScopeClasses $scopeClasses */ + reg::packed(4367, MAY_BE_ARRAY), /* withClosureBindScopeClasses $scopeClasses */ reg::packed(738, 0, 523), /* withClosureBindScopeClasses return */ - reg::packed(4508, 0, 4516), /* enterAnonymousFunction $closure */ - reg::packed(4544, MAY_BE_NULL | MAY_BE_ARRAY), /* enterAnonymousFunction $callableParameters */ - reg::packed(4563, MAY_BE_NULL | MAY_BE_ARRAY, reg::NoString, false, false, 222), /* enterAnonymousFunction $nativeCallableParameters */ + reg::packed(4538, 0, 4546), /* enterAnonymousFunction $closure */ + reg::packed(4574, MAY_BE_NULL | MAY_BE_ARRAY), /* enterAnonymousFunction $callableParameters */ + reg::packed(4593, MAY_BE_NULL | MAY_BE_ARRAY, reg::NoString, false, false, 222), /* enterAnonymousFunction $nativeCallableParameters */ reg::packed(738, 0, 523), /* enterAnonymousFunction return */ - reg::packed(4508, 0, 4516), /* enterAnonymousFunctionWithoutReflection $closure */ - reg::packed(4544, MAY_BE_NULL | MAY_BE_ARRAY), /* enterAnonymousFunctionWithoutReflection $callableParameters */ - reg::packed(4563, MAY_BE_NULL | MAY_BE_ARRAY), /* enterAnonymousFunctionWithoutReflection $nativeCallableParameters */ + reg::packed(4538, 0, 4546), /* enterAnonymousFunctionWithoutReflection $closure */ + reg::packed(4574, MAY_BE_NULL | MAY_BE_ARRAY), /* enterAnonymousFunctionWithoutReflection $callableParameters */ + reg::packed(4593, MAY_BE_NULL | MAY_BE_ARRAY), /* enterAnonymousFunctionWithoutReflection $nativeCallableParameters */ reg::packed(738, 0, 523), /* enterAnonymousFunctionWithoutReflection return */ - reg::packed(4651, 0, 4662), /* expressionTypeIsUnchangeable $typeHolder */ + reg::packed(4681, 0, 4692), /* expressionTypeIsUnchangeable $typeHolder */ reg::packed(738, MAY_BE_BOOL), /* expressionTypeIsUnchangeable return */ reg::packed(237, MAY_BE_ARRAY), /* invalidateStaticExpressions $expressionTypes */ reg::packed(738, MAY_BE_ARRAY), /* invalidateStaticExpressions return */ - reg::packed(4757, 0, 4771), /* enterArrowFunction $arrowFunction */ - reg::packed(4544, MAY_BE_NULL | MAY_BE_ARRAY), /* enterArrowFunction $callableParameters */ - reg::packed(4563, MAY_BE_NULL | MAY_BE_ARRAY, reg::NoString, false, false, 222), /* enterArrowFunction $nativeCallableParameters */ + reg::packed(4787, 0, 4801), /* enterArrowFunction $arrowFunction */ + reg::packed(4574, MAY_BE_NULL | MAY_BE_ARRAY), /* enterArrowFunction $callableParameters */ + reg::packed(4593, MAY_BE_NULL | MAY_BE_ARRAY, reg::NoString, false, false, 222), /* enterArrowFunction $nativeCallableParameters */ reg::packed(738, 0, 523), /* enterArrowFunction return */ - reg::packed(4757, 0, 4771), /* enterArrowFunctionWithoutReflection $arrowFunction */ - reg::packed(4544, MAY_BE_NULL | MAY_BE_ARRAY), /* enterArrowFunctionWithoutReflection $callableParameters */ - reg::packed(4563, MAY_BE_NULL | MAY_BE_ARRAY), /* enterArrowFunctionWithoutReflection $nativeCallableParameters */ + reg::packed(4787, 0, 4801), /* enterArrowFunctionWithoutReflection $arrowFunction */ + reg::packed(4574, MAY_BE_NULL | MAY_BE_ARRAY), /* enterArrowFunctionWithoutReflection $callableParameters */ + reg::packed(4593, MAY_BE_NULL | MAY_BE_ARRAY), /* enterArrowFunctionWithoutReflection $nativeCallableParameters */ reg::packed(738, 0, 523), /* enterArrowFunctionWithoutReflection return */ - reg::packed(2877, 0, 4860), /* isParameterValueNullable $parameter */ + reg::packed(2877, 0, 4890), /* isParameterValueNullable $parameter */ reg::packed(738, MAY_BE_BOOL), /* isParameterValueNullable return */ - reg::packed(3874, 0), /* getFunctionType $type */ - reg::packed(4906, MAY_BE_BOOL), /* getFunctionType $isNullable */ - reg::packed(4917, MAY_BE_BOOL), /* getFunctionType $isVariadic */ + reg::packed(3904, 0), /* getFunctionType $type */ + reg::packed(4936, MAY_BE_BOOL), /* getFunctionType $isNullable */ + reg::packed(4947, MAY_BE_BOOL), /* getFunctionType $isVariadic */ reg::packed(738, 0, 1424), /* getFunctionType return */ - reg::packed(2877, 0, 4860), /* getCallableParameterType $parameter */ - reg::packed(4544, MAY_BE_ARRAY), /* getCallableParameterType $callableParameters */ - reg::packed(4944, MAY_BE_LONG), /* getCallableParameterType $index */ + reg::packed(2877, 0, 4890), /* getCallableParameterType $parameter */ + reg::packed(4574, MAY_BE_ARRAY), /* getCallableParameterType $callableParameters */ + reg::packed(4974, MAY_BE_LONG), /* getCallableParameterType $index */ reg::packed(738, 0, 1424), /* getCallableParameterType return */ - reg::packed(4544, MAY_BE_ARRAY), /* buildVariadicArrayTypeFromCallableParameters $callableParameters */ - reg::packed(4975, MAY_BE_LONG), /* buildVariadicArrayTypeFromCallableParameters $startIndex */ + reg::packed(4574, MAY_BE_ARRAY), /* buildVariadicArrayTypeFromCallableParameters $callableParameters */ + reg::packed(5005, MAY_BE_LONG), /* buildVariadicArrayTypeFromCallableParameters $startIndex */ reg::packed(738, 0, 1424), /* buildVariadicArrayTypeFromCallableParameters return */ - reg::packed(5031, 0, 1424), /* intersectButNotNever $nativeType */ - reg::packed(5042, 0, 1424), /* intersectButNotNever $inferredType */ + reg::packed(5061, 0, 1424), /* intersectButNotNever $nativeType */ + reg::packed(5072, 0, 1424), /* intersectButNotNever $inferredType */ reg::packed(738, 0, 1424), /* intersectButNotNever return */ - reg::packed(966, 0, 5076), /* enterMatch $expr */ - reg::packed(5103, 0, 1424), /* enterMatch $condType */ - reg::packed(5112, 0, 1424), /* enterMatch $condNativeType */ + reg::packed(966, 0, 5106), /* enterMatch $expr */ + reg::packed(5133, 0, 1424), /* enterMatch $condType */ + reg::packed(5142, 0, 1424), /* enterMatch $condNativeType */ reg::packed(738, 0, 523), /* enterMatch return */ - reg::packed(4367, 0, 523), /* enterForeach $originalScope */ - reg::packed(5138, 0, 1712), /* enterForeach $iteratee */ - reg::packed(5147, 0, 1424), /* enterForeach $iterateeType */ - reg::packed(5160, 0, 1424), /* enterForeach $nativeIterateeType */ - reg::packed(5179, MAY_BE_STRING), /* enterForeach $valueName */ - reg::packed(5189, MAY_BE_NULL | MAY_BE_STRING), /* enterForeach $keyName */ - reg::packed(5197, MAY_BE_BOOL), /* enterForeach $valueByRef */ + reg::packed(4397, 0, 523), /* enterForeach $originalScope */ + reg::packed(5168, 0, 1712), /* enterForeach $iteratee */ + reg::packed(5177, 0, 1424), /* enterForeach $iterateeType */ + reg::packed(5190, 0, 1424), /* enterForeach $nativeIterateeType */ + reg::packed(5209, MAY_BE_STRING), /* enterForeach $valueName */ + reg::packed(5219, MAY_BE_NULL | MAY_BE_STRING), /* enterForeach $keyName */ + reg::packed(5227, MAY_BE_BOOL), /* enterForeach $valueByRef */ reg::packed(738, 0, 523), /* enterForeach return */ - reg::packed(4367, 0, 523), /* enterForeachKey $originalScope */ - reg::packed(5138, 0, 1712), /* enterForeachKey $iteratee */ - reg::packed(5147, 0, 1424), /* enterForeachKey $iterateeType */ - reg::packed(5160, 0, 1424), /* enterForeachKey $nativeIterateeType */ - reg::packed(5189, MAY_BE_STRING), /* enterForeachKey $keyName */ + reg::packed(4397, 0, 523), /* enterForeachKey $originalScope */ + reg::packed(5168, 0, 1712), /* enterForeachKey $iteratee */ + reg::packed(5177, 0, 1424), /* enterForeachKey $iterateeType */ + reg::packed(5190, 0, 1424), /* enterForeachKey $nativeIterateeType */ + reg::packed(5219, MAY_BE_STRING), /* enterForeachKey $keyName */ reg::packed(738, 0, 523), /* enterForeachKey return */ - reg::packed(5237, 0, 1424), /* enterCatchType $catchType */ + reg::packed(5267, 0, 1424), /* enterCatchType $catchType */ reg::packed(1374, MAY_BE_NULL | MAY_BE_STRING), /* enterCatchType $variableName */ reg::packed(738, 0, 523), /* enterCatchType return */ reg::packed(966, 0, 1712), /* enterExpressionAssign $expr */ - reg::packed(5262, MAY_BE_BOOL, reg::NoString, false, false, 402), /* enterExpressionAssign $isPlainWrite */ + reg::packed(5292, MAY_BE_BOOL, reg::NoString, false, false, 402), /* enterExpressionAssign $isPlainWrite */ reg::packed(738, 0, 523), /* enterExpressionAssign return */ reg::packed(966, 0, 1712), /* exitExpressionAssign $expr */ reg::packed(738, 0, 523), /* exitExpressionAssign return */ @@ -805,23 +808,23 @@ inline constexpr reg::PackedArg args[] = { reg::packed(966, 0, 1712), /* isUndefinedExpressionAllowed $expr */ reg::packed(738, MAY_BE_BOOL), /* isUndefinedExpressionAllowed return */ reg::packed(1374, MAY_BE_STRING), /* assignVariable $variableName */ - reg::packed(3874, 0, 1424), /* assignVariable $type */ - reg::packed(5031, 0, 1424), /* assignVariable $nativeType */ - reg::packed(5456, 0, 1387), /* assignVariable $certainty */ - reg::packed(5466, MAY_BE_ARRAY, reg::NoString, false, false, 253), /* assignVariable $intertwinedPropagatedFrom */ + reg::packed(3904, 0, 1424), /* assignVariable $type */ + reg::packed(5061, 0, 1424), /* assignVariable $nativeType */ + reg::packed(5486, 0, 1387), /* assignVariable $certainty */ + reg::packed(5496, MAY_BE_ARRAY, reg::NoString, false, false, 253), /* assignVariable $intertwinedPropagatedFrom */ reg::packed(738, 0, 523), /* assignVariable return */ reg::packed(966, 0, 1712), /* overwriteExpression $expr */ - reg::packed(3874, 0, 1424), /* overwriteExpression $type */ - reg::packed(5031, 0, 1424), /* overwriteExpression $nativeType */ + reg::packed(3904, 0, 1424), /* overwriteExpression $type */ + reg::packed(5061, 0, 1424), /* overwriteExpression $nativeType */ reg::packed(738, 0, 523), /* overwriteExpression return */ - reg::packed(5527, 0, 523), /* resolveIntertwinedAssignedType $scope */ - reg::packed(5533, 0, 1424), /* resolveIntertwinedAssignedType $rootType */ - reg::packed(5542, 0, 1712), /* resolveIntertwinedAssignedType $assignedExpr */ - reg::packed(5555, MAY_BE_STRING), /* resolveIntertwinedAssignedType $rootVariableName */ - reg::packed(5572, MAY_BE_BOOL), /* resolveIntertwinedAssignedType $native */ + reg::packed(2977, 0, 523), /* resolveIntertwinedAssignedType $scope */ + reg::packed(5557, 0, 1424), /* resolveIntertwinedAssignedType $rootType */ + reg::packed(5566, 0, 1712), /* resolveIntertwinedAssignedType $assignedExpr */ + reg::packed(5579, MAY_BE_STRING), /* resolveIntertwinedAssignedType $rootVariableName */ + reg::packed(5596, MAY_BE_BOOL), /* resolveIntertwinedAssignedType $native */ reg::packed(738, 0, 1424), /* resolveIntertwinedAssignedType return */ - reg::packed(5527, 0, 523), /* isDimFetchPathReachable $scope */ - reg::packed(5610, 0, 5619), /* isDimFetchPathReachable $dimFetch */ + reg::packed(2977, 0, 523), /* isDimFetchPathReachable $scope */ + reg::packed(5634, 0, 5643), /* isDimFetchPathReachable $dimFetch */ reg::packed(738, MAY_BE_BOOL), /* isDimFetchPathReachable return */ reg::packed(966, 0, 1712), /* unsetExpression $expr */ reg::packed(738, 0, 523), /* unsetExpression return */ @@ -832,196 +835,196 @@ inline constexpr reg::PackedArg args[] = { reg::packed(966, 0, 1712), /* getScopeStateNativeType $expr */ reg::packed(738, 0, 1424), /* getScopeStateNativeType return */ reg::packed(966, 0, 1712), /* resolveScopeStateType $expr */ - reg::packed(5572, MAY_BE_BOOL), /* resolveScopeStateType $native */ + reg::packed(5596, MAY_BE_BOOL), /* resolveScopeStateType $native */ reg::packed(738, 0, 1424), /* resolveScopeStateType return */ reg::packed(966, 0, 1712), /* specifyExpressionType $expr */ - reg::packed(3874, 0, 1424), /* specifyExpressionType $type */ - reg::packed(5031, 0, 1424), /* specifyExpressionType $nativeType */ - reg::packed(5456, 0, 1387), /* specifyExpressionType $certainty */ + reg::packed(3904, 0, 1424), /* specifyExpressionType $type */ + reg::packed(5061, 0, 1424), /* specifyExpressionType $nativeType */ + reg::packed(5486, 0, 1387), /* specifyExpressionType $certainty */ reg::packed(738, 0, 523), /* specifyExpressionType return */ reg::packed(738, 0, 523), /* openSpecificationScope return */ reg::packed(966, 0, 1712), /* isSpecifyExpressionTypeNoop $expr */ - reg::packed(3874, 0, 1424), /* isSpecifyExpressionTypeNoop $type */ + reg::packed(3904, 0, 1424), /* isSpecifyExpressionTypeNoop $type */ reg::packed(738, MAY_BE_BOOL), /* isSpecifyExpressionTypeNoop return */ reg::packed(966, 0, 1712), /* specifyExpressionTypeInPlace $expr */ - reg::packed(3874, 0, 1424), /* specifyExpressionTypeInPlace $type */ - reg::packed(5031, 0, 1424), /* specifyExpressionTypeInPlace $nativeType */ - reg::packed(5456, 0, 1387), /* specifyExpressionTypeInPlace $certainty */ + reg::packed(3904, 0, 1424), /* specifyExpressionTypeInPlace $type */ + reg::packed(5061, 0, 1424), /* specifyExpressionTypeInPlace $nativeType */ + reg::packed(5486, 0, 1387), /* specifyExpressionTypeInPlace $certainty */ reg::packed(738, MAY_BE_VOID), /* specifyExpressionTypeInPlace return */ reg::packed(966, 0, 1712), /* assignExpression $expr */ - reg::packed(3874, 0, 1424), /* assignExpression $type */ - reg::packed(5031, 0, 1424), /* assignExpression $nativeType */ + reg::packed(3904, 0, 1424), /* assignExpression $type */ + reg::packed(5061, 0, 1424), /* assignExpression $nativeType */ reg::packed(738, 0, 523), /* assignExpression return */ - reg::packed(5889, 0, 1424), /* assignInitializedProperty $fetchedOnType */ - reg::packed(3728, MAY_BE_STRING), /* assignInitializedProperty $propertyName */ + reg::packed(5913, 0, 1424), /* assignInitializedProperty $fetchedOnType */ + reg::packed(3758, MAY_BE_STRING), /* assignInitializedProperty $propertyName */ reg::packed(738, 0, 523), /* assignInitializedProperty return */ - reg::packed(5929, 0, 1712), /* invalidateExpression $expressionToInvalidate */ - reg::packed(5952, MAY_BE_BOOL, reg::NoString, false, false, 148), /* invalidateExpression $requireMoreCharacters */ - reg::packed(5974, MAY_BE_NULL, 1065, false, false, 222), /* invalidateExpression $invalidatingClass */ - reg::packed(5992, MAY_BE_BOOL, reg::NoString, false, false, 148), /* invalidateExpression $keepPropertyFetches */ + reg::packed(5953, 0, 1712), /* invalidateExpression $expressionToInvalidate */ + reg::packed(5976, MAY_BE_BOOL, reg::NoString, false, false, 148), /* invalidateExpression $requireMoreCharacters */ + reg::packed(5998, MAY_BE_NULL, 1065, false, false, 222), /* invalidateExpression $invalidatingClass */ + reg::packed(6016, MAY_BE_BOOL, reg::NoString, false, false, 148), /* invalidateExpression $keepPropertyFetches */ reg::packed(738, 0, 523), /* invalidateExpression return */ reg::packed(966, 0, 1712), /* isPrivatePropertyOfDifferentClass $expr */ - reg::packed(5974, 0, 1065), /* isPrivatePropertyOfDifferentClass $invalidatingClass */ + reg::packed(5998, 0, 1065), /* isPrivatePropertyOfDifferentClass $invalidatingClass */ reg::packed(738, MAY_BE_BOOL), /* isPrivatePropertyOfDifferentClass return */ - reg::packed(5929, 0, 1712), /* invalidateMethodsOnExpression $expressionToInvalidate */ + reg::packed(5953, 0, 1712), /* invalidateMethodsOnExpression $expressionToInvalidate */ reg::packed(738, 0, 523), /* invalidateMethodsOnExpression return */ reg::packed(966, 0, 1712), /* setExpressionCertaintyKeepingType $expr */ - reg::packed(5456, 0, 1387), /* setExpressionCertaintyKeepingType $certainty */ + reg::packed(5486, 0, 1387), /* setExpressionCertaintyKeepingType $certainty */ reg::packed(738, 0, 523), /* setExpressionCertaintyKeepingType return */ - reg::packed(3874, 0, 1424), /* isComplexUnionType $type */ + reg::packed(3904, 0, 1424), /* isComplexUnionType $type */ reg::packed(738, MAY_BE_BOOL), /* isComplexUnionType return */ reg::packed(966, 0, 1712), /* addTypeToExpression $expr */ - reg::packed(3874, 0, 1424), /* addTypeToExpression $type */ + reg::packed(3904, 0, 1424), /* addTypeToExpression $type */ reg::packed(738, 0, 523), /* addTypeToExpression return */ reg::packed(966, 0, 1712), /* removeTypeFromExpression $expr */ - reg::packed(6170, 0, 1424), /* removeTypeFromExpression $typeToRemove */ + reg::packed(6194, 0, 1424), /* removeTypeFromExpression $typeToRemove */ reg::packed(738, 0, 523), /* removeTypeFromExpression return */ reg::packed(966, 0, 1712), /* filterByTruthyValue $expr */ reg::packed(738, 0, 523), /* filterByTruthyValue return */ reg::packed(966, 0, 1712), /* filterByFalseyValue $expr */ reg::packed(738, 0, 523), /* filterByFalseyValue return */ - reg::packed(6248, 0, 2035), /* applySpecifiedTypes $specifiedTypes */ + reg::packed(6272, 0, 2035), /* applySpecifiedTypes $specifiedTypes */ reg::packed(738, 0, 523), /* applySpecifiedTypes return */ - reg::packed(6283, MAY_BE_ARRAY), /* processConditionalExpressionsAfterSpecifying $specifiedExpressions */ + reg::packed(6307, MAY_BE_ARRAY), /* processConditionalExpressionsAfterSpecifying $specifiedExpressions */ reg::packed(738, 0, 523), /* processConditionalExpressionsAfterSpecifying return */ reg::packed(738, MAY_BE_ARRAY), /* getConditionalExpressions return */ reg::packed(1883, MAY_BE_STRING), /* addConditionalExpressions $exprString */ - reg::packed(6375, MAY_BE_ARRAY), /* addConditionalExpressions $conditionalExpressionHolders */ + reg::packed(6399, MAY_BE_ARRAY), /* addConditionalExpressions $conditionalExpressionHolders */ reg::packed(738, 0, 523), /* addConditionalExpressions return */ reg::packed(738, 0, 523), /* exitFirstLevelStatements return */ reg::packed(738, MAY_BE_BOOL), /* isInFirstLevelStatement return */ - reg::packed(6479, MAY_BE_NULL, 523), /* mergeWith $otherScope */ - reg::packed(6490, MAY_BE_BOOL, reg::NoString, false, false, 148), /* mergeWith $preserveVacuousConditionals */ + reg::packed(6503, MAY_BE_NULL, 523), /* mergeWith $otherScope */ + reg::packed(6514, MAY_BE_BOOL, reg::NoString, false, false, 148), /* mergeWith $preserveVacuousConditionals */ reg::packed(738, 0, 523), /* mergeWith return */ - reg::packed(6528, 0, 523), /* collectAbsorbedClosures $ours */ - reg::packed(6533, 0, 523), /* collectAbsorbedClosures $theirs */ + reg::packed(6552, 0, 523), /* collectAbsorbedClosures $ours */ + reg::packed(6557, 0, 523), /* collectAbsorbedClosures $theirs */ reg::packed(738, MAY_BE_NULL, 672), /* collectAbsorbedClosures return */ - reg::packed(6479, MAY_BE_NULL, 523), /* mergeWithVariableState $otherScope */ - reg::packed(6490, MAY_BE_BOOL, reg::NoString, false, false, 148), /* mergeWithVariableState $preserveVacuousConditionals */ + reg::packed(6503, MAY_BE_NULL, 523), /* mergeWithVariableState $otherScope */ + reg::packed(6514, MAY_BE_BOOL, reg::NoString, false, false, 148), /* mergeWithVariableState $preserveVacuousConditionals */ reg::packed(738, 0, 523), /* mergeWithVariableState return */ - reg::packed(6587, MAY_BE_ARRAY), /* withoutPreciseClassConstantFetches $differingExpressionKeys */ - reg::packed(6611, MAY_BE_ARRAY), /* withoutPreciseClassConstantFetches $ourExpressionTypes */ - reg::packed(6630, MAY_BE_ARRAY), /* withoutPreciseClassConstantFetches $theirExpressionTypes */ + reg::packed(6611, MAY_BE_ARRAY), /* withoutPreciseClassConstantFetches $differingExpressionKeys */ + reg::packed(6635, MAY_BE_ARRAY), /* withoutPreciseClassConstantFetches $ourExpressionTypes */ + reg::packed(6654, MAY_BE_ARRAY), /* withoutPreciseClassConstantFetches $theirExpressionTypes */ reg::packed(738, MAY_BE_ARRAY), /* withoutPreciseClassConstantFetches return */ - reg::packed(6686, MAY_BE_ARRAY), /* preserveVacuousConditionalExpressions $currentConditionalExpressions */ - reg::packed(6716, MAY_BE_ARRAY), /* preserveVacuousConditionalExpressions $sourceConditionalExpressions */ - reg::packed(6745, MAY_BE_ARRAY), /* preserveVacuousConditionalExpressions $otherExpressionTypes */ + reg::packed(6710, MAY_BE_ARRAY), /* preserveVacuousConditionalExpressions $currentConditionalExpressions */ + reg::packed(6740, MAY_BE_ARRAY), /* preserveVacuousConditionalExpressions $sourceConditionalExpressions */ + reg::packed(6769, MAY_BE_ARRAY), /* preserveVacuousConditionalExpressions $otherExpressionTypes */ reg::packed(738, MAY_BE_ARRAY), /* preserveVacuousConditionalExpressions return */ - reg::packed(6686, MAY_BE_ARRAY), /* mergeSameGuardConditionalExpressions $currentConditionalExpressions */ - reg::packed(6804, MAY_BE_ARRAY), /* mergeSameGuardConditionalExpressions $ourConditionalExpressions */ - reg::packed(6830, MAY_BE_ARRAY), /* mergeSameGuardConditionalExpressions $theirConditionalExpressions */ + reg::packed(6710, MAY_BE_ARRAY), /* mergeSameGuardConditionalExpressions $currentConditionalExpressions */ + reg::packed(6828, MAY_BE_ARRAY), /* mergeSameGuardConditionalExpressions $ourConditionalExpressions */ + reg::packed(6854, MAY_BE_ARRAY), /* mergeSameGuardConditionalExpressions $theirConditionalExpressions */ reg::packed(738, MAY_BE_ARRAY), /* mergeSameGuardConditionalExpressions return */ - reg::packed(6895, MAY_BE_ARRAY), /* mergeConditionalExpressions $newConditionalExpressions */ - reg::packed(6921, MAY_BE_ARRAY), /* mergeConditionalExpressions $existingConditionalExpressions */ + reg::packed(6919, MAY_BE_ARRAY), /* mergeConditionalExpressions $newConditionalExpressions */ + reg::packed(6945, MAY_BE_ARRAY), /* mergeConditionalExpressions $existingConditionalExpressions */ reg::packed(738, MAY_BE_ARRAY), /* mergeConditionalExpressions return */ - reg::packed(6980, 0, 523), /* mergeInitializedProperties $calledMethodScope */ + reg::packed(7004, 0, 523), /* mergeInitializedProperties $calledMethodScope */ reg::packed(738, 0, 523), /* mergeInitializedProperties return */ - reg::packed(7025, 0, 523), /* processFinallyScope $finallyScope */ - reg::packed(7038, 0, 523), /* processFinallyScope $originalFinallyScope */ + reg::packed(7049, 0, 523), /* processFinallyScope $finallyScope */ + reg::packed(7062, 0, 523), /* processFinallyScope $originalFinallyScope */ reg::packed(738, 0, 523), /* processFinallyScope return */ - reg::packed(7079, MAY_BE_ARRAY), /* processFinallyScopeVariableTypeHolders $ourVariableTypeHolders */ - reg::packed(7102, MAY_BE_ARRAY), /* processFinallyScopeVariableTypeHolders $finallyVariableTypeHolders */ - reg::packed(7129, MAY_BE_ARRAY), /* processFinallyScopeVariableTypeHolders $originalVariableTypeHolders */ + reg::packed(7103, MAY_BE_ARRAY), /* processFinallyScopeVariableTypeHolders $ourVariableTypeHolders */ + reg::packed(7126, MAY_BE_ARRAY), /* processFinallyScopeVariableTypeHolders $finallyVariableTypeHolders */ + reg::packed(7153, MAY_BE_ARRAY), /* processFinallyScopeVariableTypeHolders $originalVariableTypeHolders */ reg::packed(738, MAY_BE_ARRAY), /* processFinallyScopeVariableTypeHolders return */ - reg::packed(7196, 0, 523), /* processClosureScope $closureScope */ - reg::packed(7209, MAY_BE_NULL, 523), /* processClosureScope $prevScope */ - reg::packed(7219, MAY_BE_ARRAY), /* processClosureScope $byRefUses */ + reg::packed(7220, 0, 523), /* processClosureScope $closureScope */ + reg::packed(7233, MAY_BE_NULL, 523), /* processClosureScope $prevScope */ + reg::packed(7243, MAY_BE_ARRAY), /* processClosureScope $byRefUses */ reg::packed(738, 0, 523), /* processClosureScope return */ - reg::packed(7249, 0, 523), /* processAlwaysIterableForeachScopeWithoutPollute $finalScope */ + reg::packed(7273, 0, 523), /* processAlwaysIterableForeachScopeWithoutPollute $finalScope */ reg::packed(738, 0, 523), /* processAlwaysIterableForeachScopeWithoutPollute return */ - reg::packed(6479, 0, 523), /* generalizeWith $otherScope */ - reg::packed(7308, MAY_BE_NULL | MAY_BE_ARRAY, reg::NoString, false, false, 222), /* generalizeWith $writableVariableNames */ + reg::packed(6503, 0, 523), /* generalizeWith $otherScope */ + reg::packed(7332, MAY_BE_NULL | MAY_BE_ARRAY, reg::NoString, false, false, 222), /* generalizeWith $writableVariableNames */ reg::packed(738, 0, 523), /* generalizeWith return */ - reg::packed(6479, 0, 523), /* generalizeWithVariableState $otherScope */ - reg::packed(7308, MAY_BE_NULL | MAY_BE_ARRAY), /* generalizeWithVariableState $writableVariableNames */ + reg::packed(6503, 0, 523), /* generalizeWithVariableState $otherScope */ + reg::packed(7332, MAY_BE_NULL | MAY_BE_ARRAY), /* generalizeWithVariableState $writableVariableNames */ reg::packed(738, 0, 523), /* generalizeWithVariableState return */ - reg::packed(7373, MAY_BE_ARRAY), /* generalizeVariableTypeHolders $variableTypeHolders */ - reg::packed(7393, MAY_BE_ARRAY), /* generalizeVariableTypeHolders $otherVariableTypeHolders */ - reg::packed(7308, MAY_BE_NULL | MAY_BE_ARRAY), /* generalizeVariableTypeHolders $writableVariableNames */ + reg::packed(7397, MAY_BE_ARRAY), /* generalizeVariableTypeHolders $variableTypeHolders */ + reg::packed(7417, MAY_BE_ARRAY), /* generalizeVariableTypeHolders $otherVariableTypeHolders */ + reg::packed(7332, MAY_BE_NULL | MAY_BE_ARRAY), /* generalizeVariableTypeHolders $writableVariableNames */ reg::packed(738, MAY_BE_ARRAY), /* generalizeVariableTypeHolders return */ - reg::packed(3874, 0, 1424), /* flattenUnionForGeneralization $type */ + reg::packed(3904, 0, 1424), /* flattenUnionForGeneralization $type */ reg::packed(738, MAY_BE_ARRAY), /* flattenUnionForGeneralization return */ - reg::packed(7478, 0, 1424), /* generalizeType $a */ - reg::packed(7480, 0, 1424), /* generalizeType $b */ - reg::packed(7482, MAY_BE_LONG), /* generalizeType $depth */ + reg::packed(7502, 0, 1424), /* generalizeType $a */ + reg::packed(7504, 0, 1424), /* generalizeType $b */ + reg::packed(7506, MAY_BE_LONG), /* generalizeType $depth */ reg::packed(738, 0, 1424), /* generalizeType return */ - reg::packed(3874, 0, 1424), /* getArrayDepth $type */ + reg::packed(3904, 0, 1424), /* getArrayDepth $type */ reg::packed(738, MAY_BE_LONG), /* getArrayDepth return */ - reg::packed(6479, 0, 523), /* equals $otherScope */ + reg::packed(6503, 0, 523), /* equals $otherScope */ reg::packed(738, MAY_BE_BOOL), /* equals return */ reg::packed(278, MAY_BE_ARRAY), /* compareConditionalExpressions $conditionalExpressions */ - reg::packed(7524, MAY_BE_ARRAY), /* compareConditionalExpressions $otherConditionalExpressions */ + reg::packed(7548, MAY_BE_ARRAY), /* compareConditionalExpressions $otherConditionalExpressions */ reg::packed(738, MAY_BE_BOOL), /* compareConditionalExpressions return */ - reg::packed(7373, MAY_BE_ARRAY), /* compareVariableTypeHolders $variableTypeHolders */ - reg::packed(7393, MAY_BE_ARRAY), /* compareVariableTypeHolders $otherVariableTypeHolders */ + reg::packed(7397, MAY_BE_ARRAY), /* compareVariableTypeHolders $variableTypeHolders */ + reg::packed(7417, MAY_BE_ARRAY), /* compareVariableTypeHolders $otherVariableTypeHolders */ reg::packed(738, MAY_BE_BOOL), /* compareVariableTypeHolders return */ - reg::packed(7609, 0, 7628), /* canAccessProperty $propertyReflection */ + reg::packed(7633, 0, 7652), /* canAccessProperty $propertyReflection */ reg::packed(738, MAY_BE_BOOL), /* canAccessProperty return */ - reg::packed(7609, 0, 7684), /* canReadProperty $propertyReflection */ + reg::packed(7633, 0, 7708), /* canReadProperty $propertyReflection */ reg::packed(738, MAY_BE_BOOL), /* canReadProperty return */ - reg::packed(7609, 0, 7684), /* canWriteProperty $propertyReflection */ + reg::packed(7633, 0, 7708), /* canWriteProperty $propertyReflection */ reg::packed(738, MAY_BE_BOOL), /* canWriteProperty return */ - reg::packed(7763, 0, 7780), /* canCallMethod $methodReflection */ + reg::packed(7787, 0, 7804), /* canCallMethod $methodReflection */ reg::packed(738, MAY_BE_BOOL), /* canCallMethod return */ - reg::packed(7830, 0, 7849), /* canAccessConstant $constantReflection */ + reg::packed(7854, 0, 7873), /* canAccessConstant $constantReflection */ reg::packed(738, MAY_BE_BOOL), /* canAccessConstant return */ - reg::packed(7910, 0, 7932), /* canAccessClassMember $classMemberReflection */ + reg::packed(7934, 0, 7956), /* canAccessClassMember $classMemberReflection */ reg::packed(738, MAY_BE_BOOL), /* canAccessClassMember return */ reg::packed(738, MAY_BE_ARRAY), /* debug return */ - reg::packed(8000, 0, 1424), /* filterTypeWithMethod $typeWithMethod */ - reg::packed(8015, MAY_BE_STRING), /* filterTypeWithMethod $methodName */ + reg::packed(8024, 0, 1424), /* filterTypeWithMethod $typeWithMethod */ + reg::packed(8039, MAY_BE_STRING), /* filterTypeWithMethod $methodName */ reg::packed(738, MAY_BE_NULL, 1424), /* filterTypeWithMethod return */ - reg::packed(8000, 0, 1424), /* getMethodReflection $typeWithMethod */ - reg::packed(8015, MAY_BE_STRING), /* getMethodReflection $methodName */ - reg::packed(738, MAY_BE_NULL, 8047), /* getMethodReflection return */ - reg::packed(8000, 0, 1424), /* getNakedMethod $typeWithMethod */ - reg::packed(8015, MAY_BE_STRING), /* getNakedMethod $methodName */ - reg::packed(738, MAY_BE_NULL, 8047), /* getNakedMethod return */ - reg::packed(8126, 0, 1424), /* getPropertyReflection $typeWithProperty */ - reg::packed(3728, MAY_BE_STRING), /* getPropertyReflection $propertyName */ - reg::packed(738, MAY_BE_NULL, 7684), /* getPropertyReflection return */ - reg::packed(8126, 0, 1424), /* getInstancePropertyReflection $typeWithProperty */ - reg::packed(3728, MAY_BE_STRING), /* getInstancePropertyReflection $propertyName */ - reg::packed(738, MAY_BE_NULL, 7684), /* getInstancePropertyReflection return */ - reg::packed(8126, 0, 1424), /* getStaticPropertyReflection $typeWithProperty */ - reg::packed(3728, MAY_BE_STRING), /* getStaticPropertyReflection $propertyName */ - reg::packed(738, MAY_BE_NULL, 7684), /* getStaticPropertyReflection return */ - reg::packed(8223, 0, 1424), /* getConstantReflection $typeWithConstant */ - reg::packed(8240, MAY_BE_STRING), /* getConstantReflection $constantName */ - reg::packed(738, MAY_BE_NULL, 7849), /* getConstantReflection return */ - reg::packed(8240, MAY_BE_STRING), /* getConstantExplicitTypeFromConfig $constantName */ - reg::packed(8275, 0, 1424), /* getConstantExplicitTypeFromConfig $constantType */ + reg::packed(8024, 0, 1424), /* getMethodReflection $typeWithMethod */ + reg::packed(8039, MAY_BE_STRING), /* getMethodReflection $methodName */ + reg::packed(738, MAY_BE_NULL, 8071), /* getMethodReflection return */ + reg::packed(8024, 0, 1424), /* getNakedMethod $typeWithMethod */ + reg::packed(8039, MAY_BE_STRING), /* getNakedMethod $methodName */ + reg::packed(738, MAY_BE_NULL, 8071), /* getNakedMethod return */ + reg::packed(8150, 0, 1424), /* getPropertyReflection $typeWithProperty */ + reg::packed(3758, MAY_BE_STRING), /* getPropertyReflection $propertyName */ + reg::packed(738, MAY_BE_NULL, 7708), /* getPropertyReflection return */ + reg::packed(8150, 0, 1424), /* getInstancePropertyReflection $typeWithProperty */ + reg::packed(3758, MAY_BE_STRING), /* getInstancePropertyReflection $propertyName */ + reg::packed(738, MAY_BE_NULL, 7708), /* getInstancePropertyReflection return */ + reg::packed(8150, 0, 1424), /* getStaticPropertyReflection $typeWithProperty */ + reg::packed(3758, MAY_BE_STRING), /* getStaticPropertyReflection $propertyName */ + reg::packed(738, MAY_BE_NULL, 7708), /* getStaticPropertyReflection return */ + reg::packed(8247, 0, 1424), /* getConstantReflection $typeWithConstant */ + reg::packed(8264, MAY_BE_STRING), /* getConstantReflection $constantName */ + reg::packed(738, MAY_BE_NULL, 7873), /* getConstantReflection return */ + reg::packed(8264, MAY_BE_STRING), /* getConstantExplicitTypeFromConfig $constantName */ + reg::packed(8299, 0, 1424), /* getConstantExplicitTypeFromConfig $constantType */ reg::packed(738, 0, 1424), /* getConstantExplicitTypeFromConfig return */ reg::packed(738, MAY_BE_ARRAY), /* getConstantTypes return */ reg::packed(1520, 0, 1525), /* getGlobalConstantType $name */ reg::packed(738, MAY_BE_NULL, 1424), /* getGlobalConstantType return */ reg::packed(1520, 0, 1525), /* createGlobalConstantFetches $name */ - reg::packed(8361, MAY_BE_STRING), /* createGlobalConstantFetches $nameString */ + reg::packed(8385, MAY_BE_STRING), /* createGlobalConstantFetches $nameString */ reg::packed(227, MAY_BE_NULL | MAY_BE_STRING), /* createGlobalConstantFetches $namespace */ reg::packed(738, MAY_BE_ARRAY), /* createGlobalConstantFetches return */ reg::packed(738, MAY_BE_ARRAY), /* getNativeConstantTypes return */ - reg::packed(5138, 0, 1424), /* getIterableKeyType $iteratee */ + reg::packed(5168, 0, 1424), /* getIterableKeyType $iteratee */ reg::packed(738, 0, 1424), /* getIterableKeyType return */ - reg::packed(5138, 0, 1424), /* getIterableValueType $iteratee */ + reg::packed(5168, 0, 1424), /* getIterableValueType $iteratee */ reg::packed(738, 0, 1424), /* getIterableValueType return */ - reg::packed(738, 0, 8463), /* getPhpVersion return */ + reg::packed(738, 0, 8487), /* getPhpVersion return */ reg::packed(738, MAY_BE_NULL, 1424), /* getConfiguredPhpVersionRange return */ - reg::packed(3874, 0, 1424), /* isOverallPhpVersionRange $type */ + reg::packed(3904, 0, 1424), /* isOverallPhpVersionRange $type */ reg::packed(738, MAY_BE_BOOL), /* isOverallPhpVersionRange return */ - reg::packed(1707, 0, 8555), /* invokeNodeCallback $node */ + reg::packed(1707, 0, 8579), /* invokeNodeCallback $node */ reg::packed(738, MAY_BE_VOID), /* invokeNodeCallback return */ - reg::packed(8589, MAY_BE_STRING), /* emitCollectedData $collectorType */ - reg::packed(8603, MAY_BE_ANY), /* emitCollectedData $data */ + reg::packed(8613, MAY_BE_STRING), /* emitCollectedData $collectorType */ + reg::packed(8627, MAY_BE_ANY), /* emitCollectedData $data */ reg::packed(738, MAY_BE_VOID), /* emitCollectedData return */ - reg::packed(8626, MAY_BE_STRING), /* trackValueDependency $extensionClass */ + reg::packed(8650, MAY_BE_STRING), /* trackValueDependency $extensionClass */ reg::packed(2540, MAY_BE_STRING), /* trackValueDependency $key */ reg::packed(738, MAY_BE_VOID), /* trackValueDependency return */ - reg::packed(8662, MAY_BE_STRING), /* trackFileDependency $file */ + reg::packed(8686, MAY_BE_STRING), /* trackFileDependency $file */ reg::packed(738, MAY_BE_VOID), /* trackFileDependency return */ - reg::packed(8687, MAY_BE_STRING), /* trackDirectoryDependency $directory */ - reg::packed(8697, MAY_BE_STRING, reg::NoString, false, false, 8705), /* trackDirectoryDependency $pattern */ + reg::packed(8711, MAY_BE_STRING), /* trackDirectoryDependency $directory */ + reg::packed(8721, MAY_BE_STRING, reg::NoString, false, false, 8729), /* trackDirectoryDependency $pattern */ reg::packed(738, MAY_BE_VOID), /* trackDirectoryDependency return */ - reg::packed(2977, MAY_BE_STRING), /* trackClassDependency $className */ + reg::packed(3007, MAY_BE_STRING), /* trackClassDependency $className */ reg::packed(738, MAY_BE_VOID), /* trackClassDependency return */ }; using Sig = reg::Sig; @@ -1104,130 +1107,131 @@ inline constexpr sigtab::Sig hasExpressionType = { { 2823 /* hasExpressionType * inline constexpr sigtab::Sig getTrackedExpressionType = { { 2841 /* getTrackedExpressionType */, 1, 142, 1, 143, ZEND_ACC_PUBLIC } }; inline constexpr sigtab::Sig pushInFunctionCall = { { 2940 /* pushInFunctionCall */, 3, 144, 3, 147, ZEND_ACC_PUBLIC } }; inline constexpr sigtab::Sig popInFunctionCall = { { 2959 /* popInFunctionCall */, 0, 148, 0, 148, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig isInClassExists = { { 2987 /* isInClassExists */, 1, 149, 1, 150, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig getFunctionCallStack = { { 3003 /* getFunctionCallStack */, 0, 151, 0, 151, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig getFunctionCallStackWithParameters = { { 3024 /* getFunctionCallStackWithParameters */, 0, 152, 0, 152, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig isInFunctionExists = { { 3072 /* isInFunctionExists */, 1, 153, 1, 154, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig enterClass = { { 3107 /* enterClass */, 1, 155, 1, 156, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig enterTrait = { { 3134 /* enterTrait */, 1, 157, 1, 158, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig enterClassMethod = { { 3678 /* enterClassMethod */, 9, 159, 21, 180, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig enterPropertyHook = { { 3856 /* enterPropertyHook */, 10, 181, 11, 192, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig transformStaticType = { { 3879 /* transformStaticType */, 1, 193, 1, 194, ZEND_ACC_PRIVATE } }; -inline constexpr sigtab::Sig getRealParameterTypes = { { 3940 /* getRealParameterTypes */, 1, 195, 1, 196, ZEND_ACC_PRIVATE } }; -inline constexpr sigtab::Sig getRealParameterDefaultValues = { { 3962 /* getRealParameterDefaultValues */, 1, 197, 1, 198, ZEND_ACC_PRIVATE } }; -inline constexpr sigtab::Sig getParameterAttributes = { { 4082 /* getParameterAttributes */, 1, 199, 1, 200, ZEND_ACC_PRIVATE } }; -inline constexpr sigtab::Sig enterFunction = { { 4208 /* enterFunction */, 8, 201, 17, 218, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig enterFunctionLike = { { 4266 /* enterFunctionLike */, 2, 219, 2, 221, ZEND_ACC_PRIVATE } }; -inline constexpr sigtab::Sig enterNamespace = { { 4298 /* enterNamespace */, 1, 222, 1, 223, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig enterClosureBind = { { 4350 /* enterClosureBind */, 3, 224, 3, 227, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig restoreOriginalScopeAfterClosureBind = { { 4381 /* restoreOriginalScopeAfterClosureBind */, 1, 228, 1, 229, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig restoreThis = { { 4435 /* restoreThis */, 1, 230, 1, 231, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig enterClosureCall = { { 4447 /* enterClosureCall */, 2, 232, 2, 234, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig isInClosureBind = { { 4464 /* isInClosureBind */, 0, 235, 0, 235, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig withClosureBindScopeClasses = { { 4480 /* withClosureBindScopeClasses */, 1, 236, 1, 237, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig enterAnonymousFunction = { { 4588 /* enterAnonymousFunction */, 2, 238, 3, 241, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig enterAnonymousFunctionWithoutReflection = { { 4611 /* enterAnonymousFunctionWithoutReflection */, 3, 242, 3, 245, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig expressionTypeIsUnchangeable = { { 4700 /* expressionTypeIsUnchangeable */, 1, 246, 1, 247, ZEND_ACC_PRIVATE } }; -inline constexpr sigtab::Sig invalidateStaticExpressions = { { 4729 /* invalidateStaticExpressions */, 1, 248, 1, 249, ZEND_ACC_PRIVATE } }; -inline constexpr sigtab::Sig enterArrowFunction = { { 4805 /* enterArrowFunction */, 2, 250, 3, 253, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig enterArrowFunctionWithoutReflection = { { 4824 /* enterArrowFunctionWithoutReflection */, 3, 254, 3, 257, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig isParameterValueNullable = { { 4881 /* isParameterValueNullable */, 1, 258, 1, 259, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig getFunctionType = { { 4928 /* getFunctionType */, 3, 260, 3, 263, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig getCallableParameterType = { { 4950 /* getCallableParameterType */, 3, 264, 3, 267, ZEND_ACC_PRIVATE } }; -inline constexpr sigtab::Sig buildVariadicArrayTypeFromCallableParameters = { { 4986 /* buildVariadicArrayTypeFromCallableParameters */, 2, 268, 2, 270, ZEND_ACC_PRIVATE } }; -inline constexpr sigtab::Sig intersectButNotNever = { { 5055 /* intersectButNotNever */, 2, 271, 2, 273, ZEND_ACC_PUBLIC | ZEND_ACC_STATIC } }; -inline constexpr sigtab::Sig enterMatch = { { 5127 /* enterMatch */, 3, 274, 3, 277, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig enterForeach = { { 5208 /* enterForeach */, 7, 278, 7, 285, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig enterForeachKey = { { 5221 /* enterForeachKey */, 5, 286, 5, 291, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig enterCatchType = { { 5247 /* enterCatchType */, 2, 292, 2, 294, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig enterExpressionAssign = { { 5275 /* enterExpressionAssign */, 1, 295, 2, 297, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig exitExpressionAssign = { { 5297 /* exitExpressionAssign */, 1, 298, 1, 299, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig isInExpressionAssign = { { 5318 /* isInExpressionAssign */, 1, 300, 1, 301, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig isInWriteExpressionAssign = { { 5339 /* isInWriteExpressionAssign */, 1, 302, 1, 303, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig setAllowedUndefinedExpression = { { 5365 /* setAllowedUndefinedExpression */, 1, 304, 1, 305, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig unsetAllowedUndefinedExpression = { { 5395 /* unsetAllowedUndefinedExpression */, 1, 306, 1, 307, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig isUndefinedExpressionAllowed = { { 5427 /* isUndefinedExpressionAllowed */, 1, 308, 1, 309, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig assignVariable = { { 5492 /* assignVariable */, 4, 310, 5, 315, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig overwriteExpression = { { 5507 /* overwriteExpression */, 3, 316, 3, 319, ZEND_ACC_PRIVATE } }; -inline constexpr sigtab::Sig resolveIntertwinedAssignedType = { { 5579 /* resolveIntertwinedAssignedType */, 5, 320, 5, 325, ZEND_ACC_PRIVATE } }; -inline constexpr sigtab::Sig isDimFetchPathReachable = { { 5653 /* isDimFetchPathReachable */, 2, 326, 2, 328, ZEND_ACC_PRIVATE } }; -inline constexpr sigtab::Sig unsetExpression = { { 5677 /* unsetExpression */, 1, 329, 1, 330, ZEND_ACC_PRIVATE } }; -inline constexpr sigtab::Sig getStateType = { { 5693 /* getStateType */, 1, 331, 1, 332, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig getScopeStateType = { { 5706 /* getScopeStateType */, 1, 333, 1, 334, ZEND_ACC_PRIVATE } }; -inline constexpr sigtab::Sig getScopeStateNativeType = { { 5724 /* getScopeStateNativeType */, 1, 335, 1, 336, ZEND_ACC_PRIVATE } }; -inline constexpr sigtab::Sig resolveScopeStateType = { { 5748 /* resolveScopeStateType */, 2, 337, 2, 339, ZEND_ACC_PRIVATE } }; -inline constexpr sigtab::Sig specifyExpressionType = { { 5770 /* specifyExpressionType */, 4, 340, 4, 344, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig openSpecificationScope = { { 5792 /* openSpecificationScope */, 0, 345, 0, 345, ZEND_ACC_PRIVATE } }; -inline constexpr sigtab::Sig isSpecifyExpressionTypeNoop = { { 5815 /* isSpecifyExpressionTypeNoop */, 2, 346, 2, 348, ZEND_ACC_PRIVATE } }; -inline constexpr sigtab::Sig specifyExpressionTypeInPlace = { { 5843 /* specifyExpressionTypeInPlace */, 4, 349, 4, 353, ZEND_ACC_PRIVATE } }; -inline constexpr sigtab::Sig assignExpression = { { 5872 /* assignExpression */, 3, 354, 3, 357, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig assignInitializedProperty = { { 5903 /* assignInitializedProperty */, 2, 358, 2, 360, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig invalidateExpression = { { 6012 /* invalidateExpression */, 1, 361, 4, 365, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig isPrivatePropertyOfDifferentClass = { { 6033 /* isPrivatePropertyOfDifferentClass */, 2, 366, 2, 368, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig invalidateMethodsOnExpression = { { 6067 /* invalidateMethodsOnExpression */, 1, 369, 1, 370, ZEND_ACC_PRIVATE } }; -inline constexpr sigtab::Sig setExpressionCertaintyKeepingType = { { 6097 /* setExpressionCertaintyKeepingType */, 2, 371, 2, 373, ZEND_ACC_PRIVATE } }; -inline constexpr sigtab::Sig isComplexUnionType = { { 6131 /* isComplexUnionType */, 1, 374, 1, 375, ZEND_ACC_PRIVATE } }; -inline constexpr sigtab::Sig addTypeToExpression = { { 6150 /* addTypeToExpression */, 2, 376, 2, 378, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig removeTypeFromExpression = { { 6183 /* removeTypeFromExpression */, 2, 379, 2, 381, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig filterByTruthyValue = { { 6208 /* filterByTruthyValue */, 1, 382, 1, 383, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig filterByFalseyValue = { { 6228 /* filterByFalseyValue */, 1, 384, 1, 385, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig applySpecifiedTypes = { { 6263 /* applySpecifiedTypes */, 1, 386, 1, 387, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig processConditionalExpressionsAfterSpecifying = { { 6304 /* processConditionalExpressionsAfterSpecifying */, 1, 388, 1, 389, ZEND_ACC_PRIVATE } }; -inline constexpr sigtab::Sig getConditionalExpressions = { { 6349 /* getConditionalExpressions */, 0, 390, 0, 390, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig addConditionalExpressions = { { 6404 /* addConditionalExpressions */, 2, 391, 2, 393, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig exitFirstLevelStatements = { { 6430 /* exitFirstLevelStatements */, 0, 394, 0, 394, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig isInFirstLevelStatement = { { 6455 /* isInFirstLevelStatement */, 0, 395, 0, 395, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig mergeWith = { { 6518 /* mergeWith */, 1, 396, 2, 398, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig collectAbsorbedClosures = { { 6540 /* collectAbsorbedClosures */, 2, 399, 2, 401, ZEND_ACC_PRIVATE } }; -inline constexpr sigtab::Sig mergeWithVariableState = { { 6564 /* mergeWithVariableState */, 1, 402, 2, 404, ZEND_ACC_PRIVATE } }; -inline constexpr sigtab::Sig withoutPreciseClassConstantFetches = { { 6651 /* withoutPreciseClassConstantFetches */, 3, 405, 3, 408, ZEND_ACC_PRIVATE } }; -inline constexpr sigtab::Sig preserveVacuousConditionalExpressions = { { 6766 /* preserveVacuousConditionalExpressions */, 3, 409, 3, 412, ZEND_ACC_PRIVATE } }; -inline constexpr sigtab::Sig mergeSameGuardConditionalExpressions = { { 6858 /* mergeSameGuardConditionalExpressions */, 3, 413, 3, 416, ZEND_ACC_PRIVATE } }; -inline constexpr sigtab::Sig mergeConditionalExpressions = { { 6952 /* mergeConditionalExpressions */, 2, 417, 2, 419, ZEND_ACC_PRIVATE } }; -inline constexpr sigtab::Sig mergeInitializedProperties = { { 6998 /* mergeInitializedProperties */, 1, 420, 1, 421, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig processFinallyScope = { { 7059 /* processFinallyScope */, 2, 422, 2, 424, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig processFinallyScopeVariableTypeHolders = { { 7157 /* processFinallyScopeVariableTypeHolders */, 3, 425, 3, 428, ZEND_ACC_PRIVATE } }; -inline constexpr sigtab::Sig processClosureScope = { { 7229 /* processClosureScope */, 3, 429, 3, 432, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig processAlwaysIterableForeachScopeWithoutPollute = { { 7260 /* processAlwaysIterableForeachScopeWithoutPollute */, 1, 433, 1, 434, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig generalizeWith = { { 7330 /* generalizeWith */, 1, 435, 2, 437, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig generalizeWithVariableState = { { 7345 /* generalizeWithVariableState */, 2, 438, 2, 440, ZEND_ACC_PRIVATE } }; -inline constexpr sigtab::Sig generalizeVariableTypeHolders = { { 7418 /* generalizeVariableTypeHolders */, 3, 441, 3, 444, ZEND_ACC_PRIVATE } }; -inline constexpr sigtab::Sig flattenUnionForGeneralization = { { 7448 /* flattenUnionForGeneralization */, 1, 445, 1, 446, ZEND_ACC_PRIVATE } }; -inline constexpr sigtab::Sig generalizeType = { { 7488 /* generalizeType */, 3, 447, 3, 450, ZEND_ACC_PRIVATE } }; -inline constexpr sigtab::Sig getArrayDepth = { { 7503 /* getArrayDepth */, 1, 451, 1, 452, ZEND_ACC_PRIVATE | ZEND_ACC_STATIC } }; -inline constexpr sigtab::Sig equals = { { 7517 /* equals */, 1, 453, 1, 454, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig compareConditionalExpressions = { { 7552 /* compareConditionalExpressions */, 2, 455, 2, 457, ZEND_ACC_PRIVATE } }; -inline constexpr sigtab::Sig compareVariableTypeHolders = { { 7582 /* compareVariableTypeHolders */, 2, 458, 2, 460, ZEND_ACC_PRIVATE } }; -inline constexpr sigtab::Sig canAccessProperty = { { 7666 /* canAccessProperty */, 1, 461, 1, 462, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig canReadProperty = { { 7730 /* canReadProperty */, 1, 463, 1, 464, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig canWriteProperty = { { 7746 /* canWriteProperty */, 1, 465, 1, 466, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig canCallMethod = { { 7816 /* canCallMethod */, 1, 467, 1, 468, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig canAccessConstant = { { 7892 /* canAccessConstant */, 1, 469, 1, 470, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig canAccessClassMember = { { 7973 /* canAccessClassMember */, 1, 471, 1, 472, ZEND_ACC_PRIVATE } }; -inline constexpr sigtab::Sig debug = { { 7994 /* debug */, 0, 473, 0, 473, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig filterTypeWithMethod = { { 8026 /* filterTypeWithMethod */, 2, 474, 2, 476, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig getMethodReflection = { { 8091 /* getMethodReflection */, 2, 477, 2, 479, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig getNakedMethod = { { 8111 /* getNakedMethod */, 2, 480, 2, 482, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig getPropertyReflection = { { 8143 /* getPropertyReflection */, 2, 483, 2, 485, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig getInstancePropertyReflection = { { 8165 /* getInstancePropertyReflection */, 2, 486, 2, 488, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig getStaticPropertyReflection = { { 8195 /* getStaticPropertyReflection */, 2, 489, 2, 491, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig getConstantReflection = { { 8253 /* getConstantReflection */, 2, 492, 2, 494, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig getConstantExplicitTypeFromConfig = { { 8288 /* getConstantExplicitTypeFromConfig */, 2, 495, 2, 497, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig getConstantTypes = { { 8322 /* getConstantTypes */, 0, 498, 0, 498, ZEND_ACC_PRIVATE } }; -inline constexpr sigtab::Sig getGlobalConstantType = { { 8339 /* getGlobalConstantType */, 1, 499, 1, 500, ZEND_ACC_PRIVATE } }; -inline constexpr sigtab::Sig createGlobalConstantFetches = { { 8372 /* createGlobalConstantFetches */, 3, 501, 3, 504, ZEND_ACC_PRIVATE | ZEND_ACC_STATIC } }; -inline constexpr sigtab::Sig getNativeConstantTypes = { { 8400 /* getNativeConstantTypes */, 0, 505, 0, 505, ZEND_ACC_PRIVATE } }; -inline constexpr sigtab::Sig getIterableKeyType = { { 8423 /* getIterableKeyType */, 1, 506, 1, 507, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig getIterableValueType = { { 8442 /* getIterableValueType */, 1, 508, 1, 509, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig getPhpVersion = { { 8487 /* getPhpVersion */, 0, 510, 0, 510, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig getConfiguredPhpVersionRange = { { 8501 /* getConfiguredPhpVersionRange */, 0, 511, 0, 511, ZEND_ACC_PRIVATE } }; -inline constexpr sigtab::Sig isOverallPhpVersionRange = { { 8530 /* isOverallPhpVersionRange */, 1, 512, 1, 513, ZEND_ACC_PRIVATE } }; -inline constexpr sigtab::Sig invokeNodeCallback = { { 8570 /* invokeNodeCallback */, 1, 514, 1, 515, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig emitCollectedData = { { 8608 /* emitCollectedData */, 2, 516, 2, 518, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig trackValueDependency = { { 8641 /* trackValueDependency */, 2, 519, 2, 521, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig trackFileDependency = { { 8667 /* trackFileDependency */, 1, 522, 1, 523, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig trackDirectoryDependency = { { 8709 /* trackDirectoryDependency */, 1, 524, 2, 526, ZEND_ACC_PUBLIC } }; -inline constexpr sigtab::Sig trackClassDependency = { { 8734 /* trackClassDependency */, 1, 527, 1, 528, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig withFunctionCallStackOf = { { 2983 /* withFunctionCallStackOf */, 1, 149, 1, 150, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig isInClassExists = { { 3017 /* isInClassExists */, 1, 151, 1, 152, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig getFunctionCallStack = { { 3033 /* getFunctionCallStack */, 0, 153, 0, 153, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig getFunctionCallStackWithParameters = { { 3054 /* getFunctionCallStackWithParameters */, 0, 154, 0, 154, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig isInFunctionExists = { { 3102 /* isInFunctionExists */, 1, 155, 1, 156, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig enterClass = { { 3137 /* enterClass */, 1, 157, 1, 158, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig enterTrait = { { 3164 /* enterTrait */, 1, 159, 1, 160, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig enterClassMethod = { { 3708 /* enterClassMethod */, 9, 161, 21, 182, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig enterPropertyHook = { { 3886 /* enterPropertyHook */, 10, 183, 11, 194, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig transformStaticType = { { 3909 /* transformStaticType */, 1, 195, 1, 196, ZEND_ACC_PRIVATE } }; +inline constexpr sigtab::Sig getRealParameterTypes = { { 3970 /* getRealParameterTypes */, 1, 197, 1, 198, ZEND_ACC_PRIVATE } }; +inline constexpr sigtab::Sig getRealParameterDefaultValues = { { 3992 /* getRealParameterDefaultValues */, 1, 199, 1, 200, ZEND_ACC_PRIVATE } }; +inline constexpr sigtab::Sig getParameterAttributes = { { 4112 /* getParameterAttributes */, 1, 201, 1, 202, ZEND_ACC_PRIVATE } }; +inline constexpr sigtab::Sig enterFunction = { { 4238 /* enterFunction */, 8, 203, 17, 220, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig enterFunctionLike = { { 4296 /* enterFunctionLike */, 2, 221, 2, 223, ZEND_ACC_PRIVATE } }; +inline constexpr sigtab::Sig enterNamespace = { { 4328 /* enterNamespace */, 1, 224, 1, 225, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig enterClosureBind = { { 4380 /* enterClosureBind */, 3, 226, 3, 229, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig restoreOriginalScopeAfterClosureBind = { { 4411 /* restoreOriginalScopeAfterClosureBind */, 1, 230, 1, 231, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig restoreThis = { { 4465 /* restoreThis */, 1, 232, 1, 233, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig enterClosureCall = { { 4477 /* enterClosureCall */, 2, 234, 2, 236, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig isInClosureBind = { { 4494 /* isInClosureBind */, 0, 237, 0, 237, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig withClosureBindScopeClasses = { { 4510 /* withClosureBindScopeClasses */, 1, 238, 1, 239, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig enterAnonymousFunction = { { 4618 /* enterAnonymousFunction */, 2, 240, 3, 243, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig enterAnonymousFunctionWithoutReflection = { { 4641 /* enterAnonymousFunctionWithoutReflection */, 3, 244, 3, 247, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig expressionTypeIsUnchangeable = { { 4730 /* expressionTypeIsUnchangeable */, 1, 248, 1, 249, ZEND_ACC_PRIVATE } }; +inline constexpr sigtab::Sig invalidateStaticExpressions = { { 4759 /* invalidateStaticExpressions */, 1, 250, 1, 251, ZEND_ACC_PRIVATE } }; +inline constexpr sigtab::Sig enterArrowFunction = { { 4835 /* enterArrowFunction */, 2, 252, 3, 255, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig enterArrowFunctionWithoutReflection = { { 4854 /* enterArrowFunctionWithoutReflection */, 3, 256, 3, 259, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig isParameterValueNullable = { { 4911 /* isParameterValueNullable */, 1, 260, 1, 261, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig getFunctionType = { { 4958 /* getFunctionType */, 3, 262, 3, 265, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig getCallableParameterType = { { 4980 /* getCallableParameterType */, 3, 266, 3, 269, ZEND_ACC_PRIVATE } }; +inline constexpr sigtab::Sig buildVariadicArrayTypeFromCallableParameters = { { 5016 /* buildVariadicArrayTypeFromCallableParameters */, 2, 270, 2, 272, ZEND_ACC_PRIVATE } }; +inline constexpr sigtab::Sig intersectButNotNever = { { 5085 /* intersectButNotNever */, 2, 273, 2, 275, ZEND_ACC_PUBLIC | ZEND_ACC_STATIC } }; +inline constexpr sigtab::Sig enterMatch = { { 5157 /* enterMatch */, 3, 276, 3, 279, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig enterForeach = { { 5238 /* enterForeach */, 7, 280, 7, 287, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig enterForeachKey = { { 5251 /* enterForeachKey */, 5, 288, 5, 293, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig enterCatchType = { { 5277 /* enterCatchType */, 2, 294, 2, 296, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig enterExpressionAssign = { { 5305 /* enterExpressionAssign */, 1, 297, 2, 299, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig exitExpressionAssign = { { 5327 /* exitExpressionAssign */, 1, 300, 1, 301, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig isInExpressionAssign = { { 5348 /* isInExpressionAssign */, 1, 302, 1, 303, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig isInWriteExpressionAssign = { { 5369 /* isInWriteExpressionAssign */, 1, 304, 1, 305, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig setAllowedUndefinedExpression = { { 5395 /* setAllowedUndefinedExpression */, 1, 306, 1, 307, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig unsetAllowedUndefinedExpression = { { 5425 /* unsetAllowedUndefinedExpression */, 1, 308, 1, 309, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig isUndefinedExpressionAllowed = { { 5457 /* isUndefinedExpressionAllowed */, 1, 310, 1, 311, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig assignVariable = { { 5522 /* assignVariable */, 4, 312, 5, 317, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig overwriteExpression = { { 5537 /* overwriteExpression */, 3, 318, 3, 321, ZEND_ACC_PRIVATE } }; +inline constexpr sigtab::Sig resolveIntertwinedAssignedType = { { 5603 /* resolveIntertwinedAssignedType */, 5, 322, 5, 327, ZEND_ACC_PRIVATE } }; +inline constexpr sigtab::Sig isDimFetchPathReachable = { { 5677 /* isDimFetchPathReachable */, 2, 328, 2, 330, ZEND_ACC_PRIVATE } }; +inline constexpr sigtab::Sig unsetExpression = { { 5701 /* unsetExpression */, 1, 331, 1, 332, ZEND_ACC_PRIVATE } }; +inline constexpr sigtab::Sig getStateType = { { 5717 /* getStateType */, 1, 333, 1, 334, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig getScopeStateType = { { 5730 /* getScopeStateType */, 1, 335, 1, 336, ZEND_ACC_PRIVATE } }; +inline constexpr sigtab::Sig getScopeStateNativeType = { { 5748 /* getScopeStateNativeType */, 1, 337, 1, 338, ZEND_ACC_PRIVATE } }; +inline constexpr sigtab::Sig resolveScopeStateType = { { 5772 /* resolveScopeStateType */, 2, 339, 2, 341, ZEND_ACC_PRIVATE } }; +inline constexpr sigtab::Sig specifyExpressionType = { { 5794 /* specifyExpressionType */, 4, 342, 4, 346, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig openSpecificationScope = { { 5816 /* openSpecificationScope */, 0, 347, 0, 347, ZEND_ACC_PRIVATE } }; +inline constexpr sigtab::Sig isSpecifyExpressionTypeNoop = { { 5839 /* isSpecifyExpressionTypeNoop */, 2, 348, 2, 350, ZEND_ACC_PRIVATE } }; +inline constexpr sigtab::Sig specifyExpressionTypeInPlace = { { 5867 /* specifyExpressionTypeInPlace */, 4, 351, 4, 355, ZEND_ACC_PRIVATE } }; +inline constexpr sigtab::Sig assignExpression = { { 5896 /* assignExpression */, 3, 356, 3, 359, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig assignInitializedProperty = { { 5927 /* assignInitializedProperty */, 2, 360, 2, 362, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig invalidateExpression = { { 6036 /* invalidateExpression */, 1, 363, 4, 367, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig isPrivatePropertyOfDifferentClass = { { 6057 /* isPrivatePropertyOfDifferentClass */, 2, 368, 2, 370, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig invalidateMethodsOnExpression = { { 6091 /* invalidateMethodsOnExpression */, 1, 371, 1, 372, ZEND_ACC_PRIVATE } }; +inline constexpr sigtab::Sig setExpressionCertaintyKeepingType = { { 6121 /* setExpressionCertaintyKeepingType */, 2, 373, 2, 375, ZEND_ACC_PRIVATE } }; +inline constexpr sigtab::Sig isComplexUnionType = { { 6155 /* isComplexUnionType */, 1, 376, 1, 377, ZEND_ACC_PRIVATE } }; +inline constexpr sigtab::Sig addTypeToExpression = { { 6174 /* addTypeToExpression */, 2, 378, 2, 380, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig removeTypeFromExpression = { { 6207 /* removeTypeFromExpression */, 2, 381, 2, 383, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig filterByTruthyValue = { { 6232 /* filterByTruthyValue */, 1, 384, 1, 385, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig filterByFalseyValue = { { 6252 /* filterByFalseyValue */, 1, 386, 1, 387, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig applySpecifiedTypes = { { 6287 /* applySpecifiedTypes */, 1, 388, 1, 389, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig processConditionalExpressionsAfterSpecifying = { { 6328 /* processConditionalExpressionsAfterSpecifying */, 1, 390, 1, 391, ZEND_ACC_PRIVATE } }; +inline constexpr sigtab::Sig getConditionalExpressions = { { 6373 /* getConditionalExpressions */, 0, 392, 0, 392, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig addConditionalExpressions = { { 6428 /* addConditionalExpressions */, 2, 393, 2, 395, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig exitFirstLevelStatements = { { 6454 /* exitFirstLevelStatements */, 0, 396, 0, 396, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig isInFirstLevelStatement = { { 6479 /* isInFirstLevelStatement */, 0, 397, 0, 397, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig mergeWith = { { 6542 /* mergeWith */, 1, 398, 2, 400, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig collectAbsorbedClosures = { { 6564 /* collectAbsorbedClosures */, 2, 401, 2, 403, ZEND_ACC_PRIVATE } }; +inline constexpr sigtab::Sig mergeWithVariableState = { { 6588 /* mergeWithVariableState */, 1, 404, 2, 406, ZEND_ACC_PRIVATE } }; +inline constexpr sigtab::Sig withoutPreciseClassConstantFetches = { { 6675 /* withoutPreciseClassConstantFetches */, 3, 407, 3, 410, ZEND_ACC_PRIVATE } }; +inline constexpr sigtab::Sig preserveVacuousConditionalExpressions = { { 6790 /* preserveVacuousConditionalExpressions */, 3, 411, 3, 414, ZEND_ACC_PRIVATE } }; +inline constexpr sigtab::Sig mergeSameGuardConditionalExpressions = { { 6882 /* mergeSameGuardConditionalExpressions */, 3, 415, 3, 418, ZEND_ACC_PRIVATE } }; +inline constexpr sigtab::Sig mergeConditionalExpressions = { { 6976 /* mergeConditionalExpressions */, 2, 419, 2, 421, ZEND_ACC_PRIVATE } }; +inline constexpr sigtab::Sig mergeInitializedProperties = { { 7022 /* mergeInitializedProperties */, 1, 422, 1, 423, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig processFinallyScope = { { 7083 /* processFinallyScope */, 2, 424, 2, 426, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig processFinallyScopeVariableTypeHolders = { { 7181 /* processFinallyScopeVariableTypeHolders */, 3, 427, 3, 430, ZEND_ACC_PRIVATE } }; +inline constexpr sigtab::Sig processClosureScope = { { 7253 /* processClosureScope */, 3, 431, 3, 434, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig processAlwaysIterableForeachScopeWithoutPollute = { { 7284 /* processAlwaysIterableForeachScopeWithoutPollute */, 1, 435, 1, 436, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig generalizeWith = { { 7354 /* generalizeWith */, 1, 437, 2, 439, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig generalizeWithVariableState = { { 7369 /* generalizeWithVariableState */, 2, 440, 2, 442, ZEND_ACC_PRIVATE } }; +inline constexpr sigtab::Sig generalizeVariableTypeHolders = { { 7442 /* generalizeVariableTypeHolders */, 3, 443, 3, 446, ZEND_ACC_PRIVATE } }; +inline constexpr sigtab::Sig flattenUnionForGeneralization = { { 7472 /* flattenUnionForGeneralization */, 1, 447, 1, 448, ZEND_ACC_PRIVATE } }; +inline constexpr sigtab::Sig generalizeType = { { 7512 /* generalizeType */, 3, 449, 3, 452, ZEND_ACC_PRIVATE } }; +inline constexpr sigtab::Sig getArrayDepth = { { 7527 /* getArrayDepth */, 1, 453, 1, 454, ZEND_ACC_PRIVATE | ZEND_ACC_STATIC } }; +inline constexpr sigtab::Sig equals = { { 7541 /* equals */, 1, 455, 1, 456, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig compareConditionalExpressions = { { 7576 /* compareConditionalExpressions */, 2, 457, 2, 459, ZEND_ACC_PRIVATE } }; +inline constexpr sigtab::Sig compareVariableTypeHolders = { { 7606 /* compareVariableTypeHolders */, 2, 460, 2, 462, ZEND_ACC_PRIVATE } }; +inline constexpr sigtab::Sig canAccessProperty = { { 7690 /* canAccessProperty */, 1, 463, 1, 464, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig canReadProperty = { { 7754 /* canReadProperty */, 1, 465, 1, 466, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig canWriteProperty = { { 7770 /* canWriteProperty */, 1, 467, 1, 468, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig canCallMethod = { { 7840 /* canCallMethod */, 1, 469, 1, 470, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig canAccessConstant = { { 7916 /* canAccessConstant */, 1, 471, 1, 472, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig canAccessClassMember = { { 7997 /* canAccessClassMember */, 1, 473, 1, 474, ZEND_ACC_PRIVATE } }; +inline constexpr sigtab::Sig debug = { { 8018 /* debug */, 0, 475, 0, 475, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig filterTypeWithMethod = { { 8050 /* filterTypeWithMethod */, 2, 476, 2, 478, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig getMethodReflection = { { 8115 /* getMethodReflection */, 2, 479, 2, 481, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig getNakedMethod = { { 8135 /* getNakedMethod */, 2, 482, 2, 484, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig getPropertyReflection = { { 8167 /* getPropertyReflection */, 2, 485, 2, 487, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig getInstancePropertyReflection = { { 8189 /* getInstancePropertyReflection */, 2, 488, 2, 490, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig getStaticPropertyReflection = { { 8219 /* getStaticPropertyReflection */, 2, 491, 2, 493, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig getConstantReflection = { { 8277 /* getConstantReflection */, 2, 494, 2, 496, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig getConstantExplicitTypeFromConfig = { { 8312 /* getConstantExplicitTypeFromConfig */, 2, 497, 2, 499, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig getConstantTypes = { { 8346 /* getConstantTypes */, 0, 500, 0, 500, ZEND_ACC_PRIVATE } }; +inline constexpr sigtab::Sig getGlobalConstantType = { { 8363 /* getGlobalConstantType */, 1, 501, 1, 502, ZEND_ACC_PRIVATE } }; +inline constexpr sigtab::Sig createGlobalConstantFetches = { { 8396 /* createGlobalConstantFetches */, 3, 503, 3, 506, ZEND_ACC_PRIVATE | ZEND_ACC_STATIC } }; +inline constexpr sigtab::Sig getNativeConstantTypes = { { 8424 /* getNativeConstantTypes */, 0, 507, 0, 507, ZEND_ACC_PRIVATE } }; +inline constexpr sigtab::Sig getIterableKeyType = { { 8447 /* getIterableKeyType */, 1, 508, 1, 509, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig getIterableValueType = { { 8466 /* getIterableValueType */, 1, 510, 1, 511, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig getPhpVersion = { { 8511 /* getPhpVersion */, 0, 512, 0, 512, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig getConfiguredPhpVersionRange = { { 8525 /* getConfiguredPhpVersionRange */, 0, 513, 0, 513, ZEND_ACC_PRIVATE } }; +inline constexpr sigtab::Sig isOverallPhpVersionRange = { { 8554 /* isOverallPhpVersionRange */, 1, 514, 1, 515, ZEND_ACC_PRIVATE } }; +inline constexpr sigtab::Sig invokeNodeCallback = { { 8594 /* invokeNodeCallback */, 1, 516, 1, 517, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig emitCollectedData = { { 8632 /* emitCollectedData */, 2, 518, 2, 520, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig trackValueDependency = { { 8665 /* trackValueDependency */, 2, 521, 2, 523, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig trackFileDependency = { { 8691 /* trackFileDependency */, 1, 524, 1, 525, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig trackDirectoryDependency = { { 8733 /* trackDirectoryDependency */, 1, 526, 2, 528, ZEND_ACC_PUBLIC } }; +inline constexpr sigtab::Sig trackClassDependency = { { 8758 /* trackClassDependency */, 1, 529, 1, 530, ZEND_ACC_PUBLIC } }; } // namespace sig } // namespace ptdecl::MutatingScope diff --git a/turbo-ext/src/support.h b/turbo-ext/src/support.h index 6c0e26f9c3a..4a7d12a1ac2 100644 --- a/turbo-ext/src/support.h +++ b/turbo-ext/src/support.h @@ -3454,6 +3454,7 @@ zv::Val pt_variable_flow_builder_writes(zval *flow); * $nativeIterateeType, $valueName, $keyName, $valueByRef) ($keyName NULL for * null) / ->enterForeachKey(...) / ->enterCatchType($catchType, * $variableName) ($variableName NULL for null) / + * ->withFunctionCallStackOf($scope) / * ->processFinallyScope($finallyScope, $originalFinallyScope) / * ->processAlwaysIterableForeachScopeWithoutPollute($finalScope): the native * body for exactly a MutatingScope, the method otherwise (everything @@ -3462,6 +3463,7 @@ zv::Val pt_mutating_scope_generalize_with_names(zend_object *scope, zend_object zv::Val pt_mutating_scope_enter_foreach(zend_object *scope, zend_object *originalScope, zval *iteratee, zval *iterateeType, zval *nativeIterateeType, zend_string *valueName, zend_string *keyName, bool valueByRef); zv::Val pt_mutating_scope_enter_foreach_key(zend_object *scope, zend_object *originalScope, zval *iteratee, zval *iterateeType, zval *nativeIterateeType, zend_string *keyName); zv::Val pt_mutating_scope_enter_catch_type(zend_object *scope, zval *catchType, zend_string *variableName); +zv::Val pt_mutating_scope_with_function_call_stack_of(zend_object *scope, zend_object *otherScope); zv::Val pt_mutating_scope_process_finally_scope(zend_object *scope, zend_object *finallyScope, zend_object *originalFinallyScope); zv::Val pt_mutating_scope_process_always_iterable_foreach_scope_without_pollute(zend_object *scope, zend_object *finalScope);