comparison vendor/sebastian/recursion-context/src/Context.php @ 14:1fec387a4317

Update Drupal core to 8.5.2 via Composer
author Chris Cannam
date Mon, 23 Apr 2018 09:46:53 +0100
parents 4c8ae668cc8c
children
comparison
equal deleted inserted replaced
13:5fb285c0d0e3 14:1fec387a4317
90 90
91 if ($key !== false) { 91 if ($key !== false) {
92 return $key; 92 return $key;
93 } 93 }
94 94
95 $key = count($this->arrays);
95 $this->arrays[] = &$array; 96 $this->arrays[] = &$array;
96 97
97 return count($this->arrays) - 1; 98 if (!isset($array[PHP_INT_MAX]) && !isset($array[PHP_INT_MAX - 1])) {
99 $array[] = $key;
100 $array[] = $this->objects;
101 } else { /* cover the improbable case too */
102 do {
103 $key = random_int(PHP_INT_MIN, PHP_INT_MAX);
104 } while (isset($array[$key]));
105
106 $array[$key] = $key;
107
108 do {
109 $key = random_int(PHP_INT_MIN, PHP_INT_MAX);
110 } while (isset($array[$key]));
111
112 $array[$key] = $this->objects;
113 }
114
115 return $key;
98 } 116 }
99 117
100 /** 118 /**
101 * @param object $object 119 * @param object $object
102 * 120 *
116 * 134 *
117 * @return int|false 135 * @return int|false
118 */ 136 */
119 private function containsArray(array &$array) 137 private function containsArray(array &$array)
120 { 138 {
121 $keys = array_keys($this->arrays, $array, true); 139 $end = array_slice($array, -2);
122 $hash = '_Key_' . microtime(true);
123 140
124 foreach ($keys as $key) { 141 return isset($end[1]) && $end[1] === $this->objects ? $end[0] : false;
125 $this->arrays[$key][$hash] = $hash;
126
127 if (isset($array[$hash]) && $array[$hash] === $hash) {
128 unset($this->arrays[$key][$hash]);
129
130 return $key;
131 }
132
133 unset($this->arrays[$key][$hash]);
134 }
135
136 return false;
137 } 142 }
138 143
139 /** 144 /**
140 * @param object $value 145 * @param object $value
141 * 146 *
147 return spl_object_hash($value); 152 return spl_object_hash($value);
148 } 153 }
149 154
150 return false; 155 return false;
151 } 156 }
157
158 public function __destruct()
159 {
160 foreach ($this->arrays as &$array) {
161 if (is_array($array)) {
162 array_pop($array);
163 array_pop($array);
164 }
165 }
166 }
152 } 167 }