-
Notifications
You must be signed in to change notification settings - Fork 578
Single-pass expression analysis groundwork - answer type questions from ExpressionResults #5857
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
ondrejmirtes
wants to merge
227
commits into
2.2.x
Choose a base branch
from
resolve-type-rewrite-2
base: 2.2.x
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
+11,189
−5,559
Open
Changes from all commits
Commits
Show all changes
227 commits
Select commit
Hold shift + click to select a range
e9f7032
Introduce ExpressionResultFactory
ondrejmirtes 8c7ae57
ExpressionResult - add beforeScope
ondrejmirtes 6fee1ff
ExpressionResult - add Expr
ondrejmirtes 6bdb410
Store ExpressionResult instead of before-Scope
ondrejmirtes 588df03
Fill the missing gaps in expr processing
ondrejmirtes b6b6e8a
Divide ExprHandler into TypeResolvingExprHandler
ondrejmirtes dd67602
ScalarHandler stops implementing TypeResolvingExprHandler
ondrejmirtes 19bb198
ExpressionResultStorageStack - answer type questions from ExpressionR…
ondrejmirtes 15aa03c
Migrate ArrayHandler - per-item types from ExpressionResults
ondrejmirtes 599fc28
Throw on unbalanced ExpressionResultStorageStack pop
ondrejmirtes d1e2b3b
Fix PHP 7.4 compat
ondrejmirtes 11a1d07
Migrate VariableHandler and InstanceofHandler - narrowing from Expres…
ondrejmirtes f382742
Add regression tests for evaluation-point array item types
ondrejmirtes 550d95b
Add regression test for certainty of undefined variables in loops
ondrejmirtes 51deb6d
Store expressions even without FNSR
ondrejmirtes 21dcc48
Only sureNot specifications skip certainly-undefined variables
ondrejmirtes 654c877
This is better
ondrejmirtes bfc610d
ExpressionResult::createTypesCallback - the inside-out TypeSpecifier:…
ondrejmirtes aa28eb9
Coalesce, Ternary, BooleanAnd, BooleanOr stop implementing TypeResolv…
ondrejmirtes f005680
Add regression test for conditional holders narrowing coalesce of pro…
ondrejmirtes ed08235
Never process expressions on a FiberScope
ondrejmirtes d42aff1
Convert rule-facing FiberScope at the new-world hook boundary
ondrejmirtes 2587701
Guard that only synthetic nodes reach the pending-fiber on-demand path
ondrejmirtes 431e5f5
Fix immediately-invoked-closure fiber flush; make the new-world guard…
ondrejmirtes 7351d1b
Flush pending fibers only at scope boundaries; process dropped call args
ondrejmirtes adaa5c3
Add PHPSTAN_GUARD_NW guard: no getType on a real node before processE…
ondrejmirtes d6b3c92
BitwiseNotHandler is no longer TypeResolvingExprHandler
ondrejmirtes 8d151b7
One more should-not
ondrejmirtes eda05b3
UnaryMinusHandler is no longer TypeResolvingExprHandler
ondrejmirtes eb4b215
UnaryPlusHandler is no longer TypeResolvingExprHandler
ondrejmirtes acc3c91
ConstFetchHandler is no longer TypeResolvingExprHandler
ondrejmirtes b5c29f7
PrintHandler is no longer TypeResolvingExprHandler
ondrejmirtes 3bc71f9
ThrowHandler is no longer TypeResolvingExprHandler
ondrejmirtes 4589795
ExitHandler is no longer TypeResolvingExprHandler
ondrejmirtes fce87de
EvalHandler is no longer TypeResolvingExprHandler
ondrejmirtes 0d2fa0d
IncludeHandler is no longer TypeResolvingExprHandler
ondrejmirtes c90ea09
YieldFromHandler is no longer TypeResolvingExprHandler
ondrejmirtes 6cd3f21
ClassConstFetchHandler is no longer TypeResolvingExprHandler
ondrejmirtes c8a4309
InterpolatedStringHandler is no longer TypeResolvingExprHandler
ondrejmirtes 929b1c6
CloneHandler is no longer TypeResolvingExprHandler
ondrejmirtes 330da0c
YieldHandler is no longer TypeResolvingExprHandler
ondrejmirtes 53fcade
AlwaysRememberedExprHandler is no longer TypeResolvingExprHandler
ondrejmirtes c91d086
NativeTypeExprHandler is no longer TypeResolvingExprHandler
ondrejmirtes caa5ff7
FunctionCallableNodeHandler is no longer TypeResolvingExprHandler
ondrejmirtes f0054bf
MethodCallableNodeHandler is no longer TypeResolvingExprHandler
ondrejmirtes 58954c5
StaticMethodCallableNodeHandler is no longer TypeResolvingExprHandler
ondrejmirtes 6c97d97
InstantiationCallableNodeHandler is no longer TypeResolvingExprHandler
ondrejmirtes 55b9280
TypeExprHandler is no longer TypeResolvingExprHandler
ondrejmirtes 2743fa6
Fix failure of forwarding ExpressionResult
ondrejmirtes 8371ae9
ErrorSuppressHandler is no longer TypeResolvingExprHandler
ondrejmirtes 21a9eff
CastHandler is no longer TypeResolvingExprHandler
ondrejmirtes fc33122
CastStringHandler is no longer TypeResolvingExprHandler
ondrejmirtes 7a883f1
PostIncHandler is no longer TypeResolvingExprHandler
ondrejmirtes 52695bb
PostDecHandler is no longer TypeResolvingExprHandler
ondrejmirtes 00dde49
PipeHandler is no longer TypeResolvingExprHandler
ondrejmirtes 25f3866
PreIncHandler is no longer TypeResolvingExprHandler
ondrejmirtes 1bad5d7
PreDecHandler is no longer TypeResolvingExprHandler
ondrejmirtes bc9efa8
AssignOpHandler is no longer TypeResolvingExprHandler
ondrejmirtes 064c0fa
AssignHandler is no longer TypeResolvingExprHandler
ondrejmirtes a4fbe8c
Track containsNullsafe on ExpressionResult and propagate it through f…
ondrejmirtes 21b08cb
PropertyFetchHandler is no longer TypeResolvingExprHandler
ondrejmirtes 34f9ec9
StaticPropertyFetchHandler is no longer TypeResolvingExprHandler
ondrejmirtes b59c3b6
Store ArrayDimFetch assign-target results with a typeCallback
ondrejmirtes a74be4c
ArrayDimFetchHandler is no longer TypeResolvingExprHandler
ondrejmirtes c20043a
Introduce IssetabilityDescriptor and fold it in MutatingScope::issetC…
ondrejmirtes 600c864
Move issetCheck onto ExpressionResult with isset()/empty() convenience
ondrejmirtes 1e0208f
CoalesceHandler reads issetCheck from the left result instead of the …
ondrejmirtes 5a672a7
EmptyHandler is no longer TypeResolvingExprHandler
ondrejmirtes fca91b8
Match issetCheckUndefined ordering in IssetabilityDescriptor::checkUn…
ondrejmirtes 9d8a231
Re-evaluate getCurrentTypesOfSpecifiedExpr on the asking scope
ondrejmirtes 9e52470
Rules\IssetCheck folds IssetabilityDescriptor instead of re-walking t…
ondrejmirtes d3c8d42
MatchHandler is no longer TypeResolvingExprHandler
ondrejmirtes 18f25ff
NullsafePropertyFetchHandler and NullsafeMethodCallHandler are no lon…
ondrejmirtes 118c664
Move first-class callable type resolution into the *CallableNode hand…
ondrejmirtes 1c5d0c7
Price synthetic narrowing expressions on demand in getCurrentTypesOfS…
ondrejmirtes 7c69349
BinaryOpHandler and BooleanNotHandler are no longer TypeResolvingExpr…
ondrejmirtes b4d8bcf
Fix getIssetabilityDescriptor shadowed by descriptor-less assignment-…
ondrejmirtes b72bea0
Eliminate the OriginalPropertyTypeExpr virtual node
ondrejmirtes 92c8235
Eliminate the GetOffsetValueTypeExpr virtual node
ondrejmirtes 23ef195
Eliminate the GetIterableKeyTypeExpr virtual node
ondrejmirtes e67f8c8
Eliminate the GetIterableValueTypeExpr virtual node
ondrejmirtes 7558d83
ExistingArrayDimFetchHandler is no longer TypeResolvingExprHandler
ondrejmirtes e260a75
UnsetOffsetExprHandler is no longer TypeResolvingExprHandler
ondrejmirtes 85e45e9
SetOffsetValueTypeExprHandler is no longer TypeResolvingExprHandler
ondrejmirtes 30fb27e
SetExistingOffsetValueTypeExprHandler is no longer TypeResolvingExprH…
ondrejmirtes 7c89b06
Read operand types from ExpressionResults in Throw/BooleanAnd/Coalesc…
ondrejmirtes cd2772f
Read operand types from ExpressionResults in Ternary/ArrayDimFetch/Pr…
ondrejmirtes c3f94d2
Read sub-expression types from ExpressionResults in offset Virtual ha…
ondrejmirtes 3106527
Read child/narrowed types from results instead of Scope::getType in l…
ondrejmirtes 5bbfe5b
Process synthetic offsetGet/callable nodes in processExpr, read resul…
ondrejmirtes ff1f664
Add readStoredOrPriceOnDemand/priceSyntheticOnDemand and use them ins…
ondrejmirtes 1553ba7
Price synthetic unary-minus operand on demand instead of Scope::getType
ondrejmirtes 7b59fa8
Read child/synthetic types via result or helpers in Match/BinaryOp/Eq…
ondrejmirtes 4a9cb9d
Thread NodeScopeResolver into narrowing/throw-point helpers to avoid …
ondrejmirtes 6ced5c5
Read child/synthetic types via results or helpers in AssignHandler's …
ondrejmirtes 1d95aeb
Read expr types via results or helpers in NodeScopeResolver instead o…
ondrejmirtes e55e051
Correct the explanation of the two load-bearing Scope::getType() exce…
ondrejmirtes 93050be
Read Identical operand types from results in RicherScopeGetTypeHelper…
ondrejmirtes 76a1f75
Read expr types from results in SpecifiedTypes::normalize when called…
ondrejmirtes f92abeb
Read assign-target sub-expression types from their results instead of…
ondrejmirtes df526d0
Read while-loop condition type from its result instead of the on-dema…
ondrejmirtes 7039451
Pass already-computed results into ImplicitToStringCallHelper and rea…
ondrejmirtes 9c42e43
NSRT test for precise Scope
ondrejmirtes 4a06cdb
Extract intrinsic argument parameter overrides from selectFromArgs in…
ondrejmirtes 3d32271
Resolve argument types on an arg-to-arg evolving scope and select the…
ondrejmirtes bedae79
FuncCallHandler is no longer TypeResolvingExprHandler
ondrejmirtes aba7554
MethodCallHandler is no longer TypeResolvingExprHandler
ondrejmirtes 5174a3b
NewHandler is no longer TypeResolvingExprHandler
ondrejmirtes 5863cce
StaticCallHandler is no longer TypeResolvingExprHandler
ondrejmirtes b0ffdaf
Extract combineVariantsForNormalization into a shared ParametersAccep…
ondrejmirtes 6590ffc
Add regression test for #13253
ondrejmirtes 2564336
Add regression test for #14396
ondrejmirtes 186daa9
Call handleDefaultTruthyOrFalseyContext on $this->typeSpecifier in mi…
ondrejmirtes c021269
Rework issetCheck with single-pass
ondrejmirtes 044ce61
Resolve isset() narrowing types from computed results, not Scope::get…
ondrejmirtes 65b846b
ClosureHandler and ArrowFunctionHandler are no longer TypeResolvingEx…
ondrejmirtes cf8eb06
Build the closure and arrow function type from the single body walk
ondrejmirtes 72f231f
Enter closure and arrow function scopes without re-walking the body
ondrejmirtes f690dd4
Simplify ExpressionResult::getType methods now that TypeResolvingExpr…
ondrejmirtes 0b52694
Throw on unhandled expr
ondrejmirtes 1d531be
Resolve the IssetExpr virtual node through an ExprHandler
ondrejmirtes 217a582
Do not ensure non-nullability of the isset/empty/?? operand itself
ondrejmirtes 67b1c8c
Decide the nullsafe short-circuit from the receiver's real type
ondrejmirtes 04e020f
Resolve the PossiblyImpureCallExpr virtual node through an ExprHandler
ondrejmirtes 0eec1bc
Resolve the backtick operator through an ExprHandler
ondrejmirtes 8665d9a
Keep the narrowed type when applySpecifiedTypes changes isset certainty
ondrejmirtes e9b853a
Resolve a maybe-existing property to its declared type instead of Err…
ondrejmirtes 2bbd42f
Treat a property with a default value as always set in isset resolution
ondrejmirtes f777476
Revert "Simplify ExpressionResult::getType methods now that TypeResol…
ondrejmirtes a884b93
Compose AlwaysRememberedExpr narrowing inside-out via createTypesCall…
ondrejmirtes 1276718
Compose nullsafe narrowing inside-out via createTypesCallback
ondrejmirtes 45ae435
Compose method/static call narrowing inside-out via createTypesCallback
ondrejmirtes 05a7918
Compose function call narrowing inside-out via createTypesCallback
ondrejmirtes 69e850d
Gate the nullsafe createTypesCallback on containsNull
ondrejmirtes 88fbb9a
Compose equality operand narrowing inside-out via createSubjectTypes
ondrejmirtes 88c3742
Route all of EqualityTypeSpecifyingHelper's narrowing through createF…
ondrejmirtes bb8d406
Route BinaryOp / Isset / conditional-holder narrowing through createF…
ondrejmirtes df1857b
Resolve child narrowing on demand instead of via specifyTypesInCondition
ondrejmirtes 5c466b3
Resolve BinaryOpHandler re-dispatched conditions on demand
ondrejmirtes 496dc27
Resolve equality re-dispatched conditions on demand
ondrejmirtes 0ab68ba
Resolve empty()'s isset-or-falsey condition on demand
ondrejmirtes dcedf61
Compose negation narrowing from the operand result; isset on demand
ondrejmirtes 76d0f7f
Thread operand results into equality narrowing
ondrejmirtes 41ad08d
Compose remembered-operand narrowing from the result, dropping manual…
ondrejmirtes bdb9f33
Drop the AlwaysRememberedExpr fan-out from TypeSpecifier::create
ondrejmirtes 0ed82e8
Resolve conditional-after-assign narrowing on demand
ondrejmirtes 2629ef1
Resolve nullsafe receiver-and-fetch condition on demand
ondrejmirtes 1768736
Read expression-statement narrowing from its result
ondrejmirtes 8eda3ed
Resolve the impossible-check condition through the scope's dispatcher
ondrejmirtes bf064f9
Apply the expression-statement narrowing via applySpecifiedTypes
ondrejmirtes f4f87b9
Apply do-while exit narrowing from the condition result
ondrejmirtes 6160e8d
Narrow control-flow scopes via applySpecifiedTypes, not filterBy*Value
ondrejmirtes a9bfd07
Require typeCallback and specifyTypesCallback on ExpressionResult
ondrejmirtes 444bb63
Remove todo
ondrejmirtes ad301fc
Replace handleDefaultTruthyOrFalseyContext with specifyDefaultTypes
ondrejmirtes d94d8aa
Read operand/receiver types from their results, not Scope::getType
ondrejmirtes 3942ecd
Guard on-demand pricing paths with PHPSTAN_GUARD_NW
ondrejmirtes 408c894
Capture per-arg ExpressionResults; read appending-arg types from them
ondrejmirtes 652e8f1
Read array_splice and resolveReturnType arg types from their results
ondrejmirtes 693181b
Carry the ??= left side's isset descriptor into its coalesce type
ondrejmirtes b0911b3
Find the early-terminating expression after processing the statement
ondrejmirtes be2db70
Consume the processed arg result for the callable-arg check in proces…
ondrejmirtes cf35bc7
Resolve the arrow function return type after its body is processed
ondrejmirtes 9fce1ed
Compute Closure::bind's bound scope from its processed arguments
ondrejmirtes f45f13b
Fix PHPStan self-analysis errors in NodeScopeResolver
ondrejmirtes addd909
Read impossible-check narrowing from the call's ExpressionResult
ondrejmirtes dd6e734
Gate the processArgs fast path on parameter late-resolvability only
ondrejmirtes 8ede1c3
Don't route curl_setopt(_array) through the metadata pre-pass
ondrejmirtes a29d8b6
Don't route implode/join through the metadata pre-pass
ondrejmirtes 1986749
Supply array_map's callback parameter type via a closure-type extension
ondrejmirtes 84d3c5a
Supply array_filter/walk/find callback parameter types via closure-ty…
ondrejmirtes fe69de0
Read array_walk's original array type after its argument is processed
ondrejmirtes 78d2695
Make Closure::bind/bindTo single-pass; drop the empty argsHaveIntrins…
ondrejmirtes c141cde
Resolve single-variant generic acceptors incrementally so they are si…
ondrejmirtes 1ec2c66
Select multi-variant acceptors by argument count so processArgs is si…
ondrejmirtes 4814c18
Deduplicate constant-condition vs impossible-check reports via collec…
ondrejmirtes e79d4e9
Process a dynamic function-call name before reading its type
ondrejmirtes 3ee8fbe
Process a nested array-dimension before reading its type in AssignHan…
ondrejmirtes 5b27db2
Process an assign-op Variable/property target as a read before compos…
ondrejmirtes 46d3358
Process Closure::call's new-$this argument before reading its type
ondrejmirtes a07c2ce
Process clone()'s arguments before reading them in clone-with handling
ondrejmirtes 20c8342
Evaluate an array-dim assignment's value before reading its type
ondrejmirtes 4abe730
Read the foreach value variable's narrowed type by name in the loop a…
ondrejmirtes 34ee5a6
Carry the nullsafe receiver type to its rule via a virtual node
ondrejmirtes 9364b53
Drop the dead Expr parameter from ExpressionResult's typeCallback
ondrejmirtes 248165e
Build pre-inc/dec literal types via ConstantTypeHelper, not the scope
ondrejmirtes 24d98eb
Resolve lexical context once at create()-time in three type callbacks
ondrejmirtes ab22782
Resolve the instanceof Name class type once at create()-time
ondrejmirtes b11cd2b
Reprocess the switch subject for the exhaustiveness check instead of …
ondrejmirtes c11c748
Reprocess the foreach iteratee and while condition on their narrowed …
ondrejmirtes b607f3e
Reprocess coalesce/ternary/match subjects on their narrowed scopes in…
ondrejmirtes 29381be
Reprocess the foreach iteratee on the post-loop scope for value/key-t…
ondrejmirtes be10e9a
Narrow the pinned-name property fetch via applySpecifiedTypes, not fi…
ondrejmirtes 733c16b
Make specifyTypesCallback required and getSpecifiedTypesForScope non-…
ondrejmirtes a8f7dca
Narrow synthetic conditions via processExprOnDemand, not filterByTrut…
ondrejmirtes 3806927
Read wrapped operand types via getType/getNativeType in cast/clone/un…
ondrejmirtes 4f649c1
Read child types via getType/getNativeType in post/pre-inc/dec, pipe,…
ondrejmirtes 2bde9c2
Read the ternary condition type via getType/getNativeType in the type…
ondrejmirtes c99b8e2
Propagate the assigned value into byref-intertwined variables instead…
ondrejmirtes a4687b9
Read binary-op operands via getType/getNativeType in the type callback
ondrejmirtes 63e4acc
Read the left operand boolean via getType/getNativeType in boolean ty…
ondrejmirtes 2658b5e
Resolve property fetch types without the asking scope
ondrejmirtes fc18100
Resolve static property fetch types without the asking scope
ondrejmirtes 57c3b05
Resolve method call return types without the asking scope
ondrejmirtes 117939b
Resolve static call return types without the asking scope
ondrejmirtes 65391df
Resolve function call return types without the asking scope
ondrejmirtes 82e7872
Resolve nullsafe fetch/call short-circuit types without the asking scope
ondrejmirtes 155584e
Read assignment and class-constant-fetch type callbacks via getType/g…
ondrejmirtes 9cda04c
Read instanceof and coalesce type callbacks without the asking scope
ondrejmirtes 6314fe0
Read assign-op type callback without the asking scope
ondrejmirtes b822915
Pass the iteratee types into enterForeach instead of re-reading them
ondrejmirtes 7f58fd7
Pass the iteratee types into enterForeachKey instead of re-reading them
ondrejmirtes 31cf14b
Make the ExpressionResult typeCallback resolve from a native flag, no…
ondrejmirtes 52242b1
Require an ExpressionResult to have either a precomputed type or a ty…
ondrejmirtes e2085d5
Read the tracked holder directly in ExpressionResult, not via Scope::…
ondrejmirtes 1e2f939
Get rid of truthyScopeCallback and falseyScopeCallback
ondrejmirtes 460e9c9
Use the operand's own truthy/falsey scope for &&/|| narrowing
ondrejmirtes c13b5d3
Record conditional holders from by-ref-updated variables via scope state
ondrejmirtes e16b537
Derive statement exit points from never instead of findEarlyTerminati…
ondrejmirtes 30fbee6
Narrower return type
ondrejmirtes fa6bb8f
Do not use getChildSpecifiedTypes
ondrejmirtes de9d53c
Inline getSpecifiedTypesForScope instead of getChildSpecifiedTypes
ondrejmirtes 736399b
Keep getType for the dropped-self-condition complement
ondrejmirtes 845a34b
Add regression test for the type of a Closure::bind callback
ondrejmirtes 2676e64
Add regression test for array value type after foreach by-ref reassig…
ondrejmirtes fa2aa77
Add regression test for list<non-empty-array> preserved after foreach…
ondrejmirtes fb28d43
Add regression test for ??= on a dynamic property array offset
ondrejmirtes File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,76 @@ | ||
| <?php declare(strict_types = 1); | ||
|
|
||
| namespace PHPStan\Analyser; | ||
|
|
||
| use PhpParser\Node\Expr; | ||
| use PHPStan\Reflection\ParametersAcceptor; | ||
| use function spl_object_id; | ||
|
|
||
| /** | ||
| * Result of NodeScopeResolver::processArgs(): the scope/throw/impure state after | ||
| * processing all arguments (wrapped ExpressionResult) plus the ParametersAcceptor | ||
| * resolved from the arg types gathered on the arg-to-arg evolving scope. The | ||
| * resolved acceptor is type-driven (selectFromTypes) so its generics are resolved | ||
| * against the actual argument types - callers wire it into the call expression's | ||
| * stored return type. Null when the call had no variants (dynamic callee). | ||
| */ | ||
| final class ArgsResult | ||
| { | ||
|
|
||
| /** | ||
| * @param array<int, ExpressionResult> $argResults keyed by spl_object_id of each argument's value expression | ||
| */ | ||
| public function __construct( | ||
| private ExpressionResult $expressionResult, | ||
| private ?ParametersAcceptor $resolvedParametersAcceptor, | ||
| private array $argResults = [], | ||
| ) | ||
| { | ||
| } | ||
|
|
||
| /** | ||
| * The already-processed ExpressionResult of a call argument's value expression, | ||
| * so callers read its type via the result instead of re-asking the scope. | ||
| */ | ||
| public function getArgResult(Expr $argValue): ?ExpressionResult | ||
| { | ||
| return $this->argResults[spl_object_id($argValue)] ?? null; | ||
| } | ||
|
|
||
| public function getScope(): MutatingScope | ||
| { | ||
| return $this->expressionResult->getScope(); | ||
| } | ||
|
|
||
| public function hasYield(): bool | ||
| { | ||
| return $this->expressionResult->hasYield(); | ||
| } | ||
|
|
||
| public function isAlwaysTerminating(): bool | ||
| { | ||
| return $this->expressionResult->isAlwaysTerminating(); | ||
| } | ||
|
|
||
| /** | ||
| * @return InternalThrowPoint[] | ||
| */ | ||
| public function getThrowPoints(): array | ||
| { | ||
| return $this->expressionResult->getThrowPoints(); | ||
| } | ||
|
|
||
| /** | ||
| * @return ImpurePoint[] | ||
| */ | ||
| public function getImpurePoints(): array | ||
| { | ||
| return $this->expressionResult->getImpurePoints(); | ||
| } | ||
|
|
||
| public function getResolvedParametersAcceptor(): ?ParametersAcceptor | ||
| { | ||
| return $this->resolvedParametersAcceptor; | ||
| } | ||
|
|
||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
should this read
withFiber?