@@ -985,12 +985,14 @@ public static function reduce($value, $isPair = true, $reduceBuildersAndAugmenta
985985 $ reductionValue = array_pop ($ reductionStack );
986986
987987 if ($ reductionValue instanceof Value) {
988+ $ prevIsEvaluatingUserData = GlobalRuntimeState::$ isEvaluatingUserData ;
989+ $ prevIsEvaluatingData = GlobalRuntimeState::$ isEvaluatingData ;
988990 GlobalRuntimeState::$ isEvaluatingUserData = true ;
989991 GlobalRuntimeState::$ isEvaluatingData = true ;
990992 $ augmented = RuntimeValues::getValue ($ reductionValue );
991993 $ augmented = self ::guardRuntimeReturnValue ($ augmented );
992- GlobalRuntimeState::$ isEvaluatingUserData = false ;
993- GlobalRuntimeState::$ isEvaluatingData = false ;
994+ GlobalRuntimeState::$ isEvaluatingUserData = $ prevIsEvaluatingUserData ;
995+ GlobalRuntimeState::$ isEvaluatingData = $ prevIsEvaluatingData ;
994996
995997 if (! $ isPair ) {
996998 return $ augmented ;
@@ -1000,45 +1002,52 @@ public static function reduce($value, $isPair = true, $reduceBuildersAndAugmenta
10001002
10011003 continue ;
10021004 } elseif ($ reductionValue instanceof Values) {
1005+ $ prevIsEvaluatingData = GlobalRuntimeState::$ isEvaluatingData ;
10031006 GlobalRuntimeState::$ isEvaluatingData = true ;
10041007 $ reductionStack [] = $ reductionValue ->toArray ();
1005- GlobalRuntimeState::$ isEvaluatingData = false ;
1008+ GlobalRuntimeState::$ isEvaluatingData = $ prevIsEvaluatingData ;
10061009
10071010 continue ;
10081011 } elseif ($ reductionValue instanceof \Statamic \Entries \Collection) {
1012+ $ prevIsEvaluatingData = GlobalRuntimeState::$ isEvaluatingData ;
10091013 GlobalRuntimeState::$ isEvaluatingData = true ;
10101014 $ reductionStack [] = RuntimeValues::resolveWithRuntimeIsolation ($ reductionValue );
1011- GlobalRuntimeState::$ isEvaluatingData = false ;
1015+ GlobalRuntimeState::$ isEvaluatingData = $ prevIsEvaluatingData ;
10121016
10131017 continue ;
10141018 } elseif ($ reductionValue instanceof ArrayableString) {
1019+ $ prevIsEvaluatingData = GlobalRuntimeState::$ isEvaluatingData ;
10151020 GlobalRuntimeState::$ isEvaluatingData = true ;
10161021 $ reductionStack [] = $ reductionValue ->toArray ();
1017- GlobalRuntimeState::$ isEvaluatingData = false ;
1022+ GlobalRuntimeState::$ isEvaluatingData = $ prevIsEvaluatingData ;
10181023
10191024 continue ;
10201025 } elseif ($ reductionValue instanceof Augmentable) {
10211026 // Avoids resolving augmented data "too early".
10221027 if ($ reduceBuildersAndAugmentables ) {
1028+ $ prevIsEvaluatingUserData = GlobalRuntimeState::$ isEvaluatingUserData ;
1029+ $ prevIsEvaluatingData = GlobalRuntimeState::$ isEvaluatingData ;
10231030 GlobalRuntimeState::$ isEvaluatingUserData = true ;
10241031 GlobalRuntimeState::$ isEvaluatingData = true ;
10251032 $ augmented = RuntimeValues::resolveWithRuntimeIsolation ($ reductionValue );
10261033 $ augmented = self ::guardRuntimeReturnValue ($ augmented );
1027- GlobalRuntimeState::$ isEvaluatingUserData = false ;
1028- GlobalRuntimeState::$ isEvaluatingData = false ;
1034+ GlobalRuntimeState::$ isEvaluatingUserData = $ prevIsEvaluatingUserData ;
1035+ GlobalRuntimeState::$ isEvaluatingData = $ prevIsEvaluatingData ;
10291036 $ reductionStack [] = $ augmented ;
10301037 } else {
10311038 return $ reductionValue ;
10321039 }
10331040
10341041 continue ;
10351042 } elseif ($ reductionValue instanceof Collection) {
1043+ $ prevIsEvaluatingData = GlobalRuntimeState::$ isEvaluatingData ;
10361044 GlobalRuntimeState::$ isEvaluatingData = true ;
10371045 $ reductionStack [] = $ reductionValue ->all ();
1038- GlobalRuntimeState::$ isEvaluatingData = false ;
1046+ GlobalRuntimeState::$ isEvaluatingData = $ prevIsEvaluatingData ;
10391047
10401048 continue ;
10411049 } elseif ($ reductionValue instanceof Model) {
1050+ $ prevIsEvaluatingData = GlobalRuntimeState::$ isEvaluatingData ;
10421051 GlobalRuntimeState::$ isEvaluatingData = true ;
10431052 $ data = $ reductionValue ->toArray ();
10441053
@@ -1055,19 +1064,21 @@ public static function reduce($value, $isPair = true, $reduceBuildersAndAugmenta
10551064 }
10561065
10571066 $ reductionStack [] = $ data ;
1058- GlobalRuntimeState::$ isEvaluatingData = false ;
1067+ GlobalRuntimeState::$ isEvaluatingData = $ prevIsEvaluatingData ;
10591068
10601069 continue ;
10611070 } elseif ($ reductionValue instanceof Arrayable) {
1071+ $ prevIsEvaluatingData = GlobalRuntimeState::$ isEvaluatingData ;
10621072 GlobalRuntimeState::$ isEvaluatingData = true ;
10631073 $ reductionStack [] = $ reductionValue ->toArray ();
1064- GlobalRuntimeState::$ isEvaluatingData = false ;
1074+ GlobalRuntimeState::$ isEvaluatingData = $ prevIsEvaluatingData ;
10651075
10661076 continue ;
10671077 } elseif ($ reductionValue instanceof Builder && $ reduceBuildersAndAugmentables ) {
1078+ $ prevIsEvaluatingData = GlobalRuntimeState::$ isEvaluatingData ;
10681079 GlobalRuntimeState::$ isEvaluatingData = true ;
10691080 $ reductionStack [] = $ reductionValue ->get ();
1070- GlobalRuntimeState::$ isEvaluatingData = false ;
1081+ GlobalRuntimeState::$ isEvaluatingData = $ prevIsEvaluatingData ;
10711082
10721083 continue ;
10731084 }
@@ -1089,6 +1100,8 @@ public static function reduce($value, $isPair = true, $reduceBuildersAndAugmenta
10891100 */
10901101 public static function reduceForAntlers ($ value , Parser $ parser , $ data , $ isPair = true )
10911102 {
1103+ $ prevIsEvaluatingUserData = GlobalRuntimeState::$ isEvaluatingUserData ;
1104+ $ prevIsEvaluatingData = GlobalRuntimeState::$ isEvaluatingData ;
10921105 GlobalRuntimeState::$ isEvaluatingUserData = true ;
10931106 GlobalRuntimeState::$ isEvaluatingData = true ;
10941107
@@ -1101,20 +1114,14 @@ public static function reduceForAntlers($value, Parser $parser, $data, $isPair =
11011114 }
11021115
11031116 if ($ value instanceof Value) {
1104- GlobalRuntimeState::$ isEvaluatingUserData = true ;
1105-
11061117 if (! $ isPair ) {
11071118 $ returnValue = $ value ->antlersValue ($ parser , $ data );
11081119 } else {
11091120 $ returnValue = self ::reduce ($ value ->antlersValue ($ parser , $ data ));
11101121 }
11111122 $ returnValue = self ::guardRuntimeReturnValue ($ returnValue );
1112-
1113- GlobalRuntimeState::$ isEvaluatingUserData = false ;
11141123 } elseif ($ value instanceof Values) {
1115- GlobalRuntimeState::$ isEvaluatingUserData = true ;
11161124 $ returnValue = $ value ->toArray ();
1117- GlobalRuntimeState::$ isEvaluatingUserData = false ;
11181125 } else {
11191126 if (! $ isPair ) {
11201127 if (is_array ($ value )) {
@@ -1129,8 +1136,8 @@ public static function reduceForAntlers($value, Parser $parser, $data, $isPair =
11291136 }
11301137 }
11311138
1132- GlobalRuntimeState::$ isEvaluatingUserData = false ;
1133- GlobalRuntimeState::$ isEvaluatingData = false ;
1139+ GlobalRuntimeState::$ isEvaluatingUserData = $ prevIsEvaluatingUserData ;
1140+ GlobalRuntimeState::$ isEvaluatingData = $ prevIsEvaluatingData ;
11341141
11351142 return $ returnValue ;
11361143 }
0 commit comments