From 536f37b71904e140a664b6bce260a617458574be Mon Sep 17 00:00:00 2001 From: Markus Staab Date: Tue, 20 Oct 2026 10:24:42 +0200 Subject: [PATCH 1/2] ForeachEmptyOrObjectNarrowingHelper: Prevent unnecessary work --- .../Helper/ForeachEmptyOrObjectNarrowingHelper.php | 2 +- turbo-ext/src/ForeachEmptyOrObjectNarrowingHelper.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Analyser/ExprHandler/Helper/ForeachEmptyOrObjectNarrowingHelper.php b/src/Analyser/ExprHandler/Helper/ForeachEmptyOrObjectNarrowingHelper.php index 31aeb817482..e40c2b07280 100644 --- a/src/Analyser/ExprHandler/Helper/ForeachEmptyOrObjectNarrowingHelper.php +++ b/src/Analyser/ExprHandler/Helper/ForeachEmptyOrObjectNarrowingHelper.php @@ -99,12 +99,12 @@ private function composeScope( if ($leftTruthyTypes === null || $leftFalseyTypes === null) { return null; } - $leftTruthyScope = $scope->applySpecifiedTypes($leftTruthyTypes->setRootExpr($identical)); $leftFalseyScope = $scope->applySpecifiedTypes($leftFalseyTypes->setRootExpr($identical)); $rightTruthyTypes = $rightTypes($leftFalseyScope, TypeSpecifierContext::createTruthy()); if ($rightTruthyTypes === null) { return null; } + $leftTruthyScope = $scope->applySpecifiedTypes($leftTruthyTypes->setRootExpr($identical)); $rightTruthyScope = $leftFalseyScope->applySpecifiedTypes($rightTruthyTypes->setRootExpr($isObjectCall)); $types = $this->booleanNarrowingHelper->specifyDisjunction( diff --git a/turbo-ext/src/ForeachEmptyOrObjectNarrowingHelper.cpp b/turbo-ext/src/ForeachEmptyOrObjectNarrowingHelper.cpp index 90b79dc1c38..9e0bcf9b6c7 100644 --- a/turbo-ext/src/ForeachEmptyOrObjectNarrowingHelper.cpp +++ b/turbo-ext/src/ForeachEmptyOrObjectNarrowingHelper.cpp @@ -317,13 +317,13 @@ class ForeachEmptyOrObjectNarrowingHelper zv::Val leftFalseyTypes = leftTypesOf(leftCaptures, scope, &falsey); if (UNEXPECTED(leftFalseyTypes.isUndef())) return zv::Val(); if (leftTruthyTypes.isNull() || leftFalseyTypes.isNull()) return zv::Val::null(); - zv::Val leftTruthyScope = applyRooted(scope, leftTruthyTypes.raw(), identical); - if (UNEXPECTED(leftTruthyScope.isUndef())) return zv::Val(); zv::Val leftFalseyScope = applyRooted(scope, leftFalseyTypes.raw(), identical); if (UNEXPECTED(leftFalseyScope.isUndef())) return zv::Val(); zv::Val rightTruthyTypes = rightTypesOf(rightCaptures, leftFalseyScope.raw(), &truthy); if (UNEXPECTED(rightTruthyTypes.isUndef())) return zv::Val(); if (rightTruthyTypes.isNull()) return zv::Val::null(); + zv::Val leftTruthyScope = applyRooted(scope, leftTruthyTypes.raw(), identical); + if (UNEXPECTED(leftTruthyScope.isUndef())) return zv::Val(); zv::Val rightTruthyScope = applyRooted(leftFalseyScope.raw(), rightTruthyTypes.raw(), isObjectCall); if (UNEXPECTED(rightTruthyScope.isUndef())) return zv::Val(); From eb7a6c3a96a287e5bfc9ef72e976708adc733044 Mon Sep 17 00:00:00 2001 From: Markus Staab Date: Tue, 20 Oct 2026 10:36:55 +0200 Subject: [PATCH 2/2] Bump expected turbo version --- src/Turbo/TurboExtensionEnabler.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Turbo/TurboExtensionEnabler.php b/src/Turbo/TurboExtensionEnabler.php index 76d78bd812e..cd4159ef40b 100644 --- a/src/Turbo/TurboExtensionEnabler.php +++ b/src/Turbo/TurboExtensionEnabler.php @@ -34,7 +34,7 @@ final class TurboExtensionEnabler { - public const EXPECTED_EXTENSION_VERSION = '80f2bb1'; + public const EXPECTED_EXTENSION_VERSION = '536f37b'; private static bool $active = false;