@@ -983,12 +983,14 @@ public static function reduce($value, $isPair = true, $reduceBuildersAndAugmenta
983983 $ reductionValue = array_pop ($ reductionStack );
984984
985985 if ($ reductionValue instanceof Value) {
986+ $ prevIsEvaluatingUserData = GlobalRuntimeState::$ isEvaluatingUserData ;
987+ $ prevIsEvaluatingData = GlobalRuntimeState::$ isEvaluatingData ;
986988 GlobalRuntimeState::$ isEvaluatingUserData = true ;
987989 GlobalRuntimeState::$ isEvaluatingData = true ;
988990 $ augmented = RuntimeValues::getValue ($ reductionValue );
989991 $ augmented = self ::guardRuntimeReturnValue ($ augmented );
990- GlobalRuntimeState::$ isEvaluatingUserData = false ;
991- GlobalRuntimeState::$ isEvaluatingData = false ;
992+ GlobalRuntimeState::$ isEvaluatingUserData = $ prevIsEvaluatingUserData ;
993+ GlobalRuntimeState::$ isEvaluatingData = $ prevIsEvaluatingData ;
992994
993995 if (! $ isPair ) {
994996 return $ augmented ;
@@ -998,45 +1000,52 @@ public static function reduce($value, $isPair = true, $reduceBuildersAndAugmenta
9981000
9991001 continue ;
10001002 } elseif ($ reductionValue instanceof Values) {
1003+ $ prevIsEvaluatingData = GlobalRuntimeState::$ isEvaluatingData ;
10011004 GlobalRuntimeState::$ isEvaluatingData = true ;
10021005 $ reductionStack [] = $ reductionValue ->toArray ();
1003- GlobalRuntimeState::$ isEvaluatingData = false ;
1006+ GlobalRuntimeState::$ isEvaluatingData = $ prevIsEvaluatingData ;
10041007
10051008 continue ;
10061009 } elseif ($ reductionValue instanceof \Statamic \Entries \Collection) {
1010+ $ prevIsEvaluatingData = GlobalRuntimeState::$ isEvaluatingData ;
10071011 GlobalRuntimeState::$ isEvaluatingData = true ;
10081012 $ reductionStack [] = RuntimeValues::resolveWithRuntimeIsolation ($ reductionValue );
1009- GlobalRuntimeState::$ isEvaluatingData = false ;
1013+ GlobalRuntimeState::$ isEvaluatingData = $ prevIsEvaluatingData ;
10101014
10111015 continue ;
10121016 } elseif ($ reductionValue instanceof ArrayableString) {
1017+ $ prevIsEvaluatingData = GlobalRuntimeState::$ isEvaluatingData ;
10131018 GlobalRuntimeState::$ isEvaluatingData = true ;
10141019 $ reductionStack [] = $ reductionValue ->toArray ();
1015- GlobalRuntimeState::$ isEvaluatingData = false ;
1020+ GlobalRuntimeState::$ isEvaluatingData = $ prevIsEvaluatingData ;
10161021
10171022 continue ;
10181023 } elseif ($ reductionValue instanceof Augmentable) {
10191024 // Avoids resolving augmented data "too early".
10201025 if ($ reduceBuildersAndAugmentables ) {
1026+ $ prevIsEvaluatingUserData = GlobalRuntimeState::$ isEvaluatingUserData ;
1027+ $ prevIsEvaluatingData = GlobalRuntimeState::$ isEvaluatingData ;
10211028 GlobalRuntimeState::$ isEvaluatingUserData = true ;
10221029 GlobalRuntimeState::$ isEvaluatingData = true ;
10231030 $ augmented = RuntimeValues::resolveWithRuntimeIsolation ($ reductionValue );
10241031 $ augmented = self ::guardRuntimeReturnValue ($ augmented );
1025- GlobalRuntimeState::$ isEvaluatingUserData = false ;
1026- GlobalRuntimeState::$ isEvaluatingData = false ;
1032+ GlobalRuntimeState::$ isEvaluatingUserData = $ prevIsEvaluatingUserData ;
1033+ GlobalRuntimeState::$ isEvaluatingData = $ prevIsEvaluatingData ;
10271034 $ reductionStack [] = $ augmented ;
10281035 } else {
10291036 return $ reductionValue ;
10301037 }
10311038
10321039 continue ;
10331040 } elseif ($ reductionValue instanceof Collection) {
1041+ $ prevIsEvaluatingData = GlobalRuntimeState::$ isEvaluatingData ;
10341042 GlobalRuntimeState::$ isEvaluatingData = true ;
10351043 $ reductionStack [] = $ reductionValue ->all ();
1036- GlobalRuntimeState::$ isEvaluatingData = false ;
1044+ GlobalRuntimeState::$ isEvaluatingData = $ prevIsEvaluatingData ;
10371045
10381046 continue ;
10391047 } elseif ($ reductionValue instanceof Model) {
1048+ $ prevIsEvaluatingData = GlobalRuntimeState::$ isEvaluatingData ;
10401049 GlobalRuntimeState::$ isEvaluatingData = true ;
10411050 $ data = $ reductionValue ->toArray ();
10421051
@@ -1053,19 +1062,21 @@ public static function reduce($value, $isPair = true, $reduceBuildersAndAugmenta
10531062 }
10541063
10551064 $ reductionStack [] = $ data ;
1056- GlobalRuntimeState::$ isEvaluatingData = false ;
1065+ GlobalRuntimeState::$ isEvaluatingData = $ prevIsEvaluatingData ;
10571066
10581067 continue ;
10591068 } elseif ($ reductionValue instanceof Arrayable) {
1069+ $ prevIsEvaluatingData = GlobalRuntimeState::$ isEvaluatingData ;
10601070 GlobalRuntimeState::$ isEvaluatingData = true ;
10611071 $ reductionStack [] = $ reductionValue ->toArray ();
1062- GlobalRuntimeState::$ isEvaluatingData = false ;
1072+ GlobalRuntimeState::$ isEvaluatingData = $ prevIsEvaluatingData ;
10631073
10641074 continue ;
10651075 } elseif ($ reductionValue instanceof Builder && $ reduceBuildersAndAugmentables ) {
1076+ $ prevIsEvaluatingData = GlobalRuntimeState::$ isEvaluatingData ;
10661077 GlobalRuntimeState::$ isEvaluatingData = true ;
10671078 $ reductionStack [] = $ reductionValue ->get ();
1068- GlobalRuntimeState::$ isEvaluatingData = false ;
1079+ GlobalRuntimeState::$ isEvaluatingData = $ prevIsEvaluatingData ;
10691080
10701081 continue ;
10711082 }
@@ -1087,6 +1098,8 @@ public static function reduce($value, $isPair = true, $reduceBuildersAndAugmenta
10871098 */
10881099 public static function reduceForAntlers ($ value , Parser $ parser , $ data , $ isPair = true )
10891100 {
1101+ $ prevIsEvaluatingUserData = GlobalRuntimeState::$ isEvaluatingUserData ;
1102+ $ prevIsEvaluatingData = GlobalRuntimeState::$ isEvaluatingData ;
10901103 GlobalRuntimeState::$ isEvaluatingUserData = true ;
10911104 GlobalRuntimeState::$ isEvaluatingData = true ;
10921105
@@ -1099,20 +1112,14 @@ public static function reduceForAntlers($value, Parser $parser, $data, $isPair =
10991112 }
11001113
11011114 if ($ value instanceof Value) {
1102- GlobalRuntimeState::$ isEvaluatingUserData = true ;
1103-
11041115 if (! $ isPair ) {
11051116 $ returnValue = $ value ->antlersValue ($ parser , $ data );
11061117 } else {
11071118 $ returnValue = self ::reduce ($ value ->antlersValue ($ parser , $ data ));
11081119 }
11091120 $ returnValue = self ::guardRuntimeReturnValue ($ returnValue );
1110-
1111- GlobalRuntimeState::$ isEvaluatingUserData = false ;
11121121 } elseif ($ value instanceof Values) {
1113- GlobalRuntimeState::$ isEvaluatingUserData = true ;
11141122 $ returnValue = $ value ->toArray ();
1115- GlobalRuntimeState::$ isEvaluatingUserData = false ;
11161123 } else {
11171124 if (! $ isPair ) {
11181125 if (is_array ($ value )) {
@@ -1127,8 +1134,8 @@ public static function reduceForAntlers($value, Parser $parser, $data, $isPair =
11271134 }
11281135 }
11291136
1130- GlobalRuntimeState::$ isEvaluatingUserData = false ;
1131- GlobalRuntimeState::$ isEvaluatingData = false ;
1137+ GlobalRuntimeState::$ isEvaluatingUserData = $ prevIsEvaluatingUserData ;
1138+ GlobalRuntimeState::$ isEvaluatingData = $ prevIsEvaluatingData ;
11321139
11331140 return $ returnValue ;
11341141 }
0 commit comments