@@ 203-231 (lines=29) @@ | ||
200 | * |
|
201 | * @param VisitorInterface $visitor |
|
202 | */ |
|
203 | public function walk(VisitorInterface $visitor) |
|
204 | { |
|
205 | $node = $this; |
|
206 | $result = $visitor->enterNode($node); |
|
207 | if ($result instanceof NodeInterface) { |
|
208 | $node = $result; |
|
209 | } |
|
210 | if ($result !== NodeTraverser::DONT_TRAVERSE_CHILDREN) { |
|
211 | if (is_array($this->subTree)) { |
|
212 | foreach ($this->subTree as $key => $operand) { |
|
213 | $result2 = $operand->walk($visitor); |
|
214 | if ($result2 === NodeTraverser::REMOVE_NODE) { |
|
215 | unset($this->subTree[$key]); |
|
216 | } elseif ($result2 instanceof NodeInterface) { |
|
217 | $this->subTree[$key] = $result2; |
|
218 | } |
|
219 | } |
|
220 | } else { |
|
221 | $result2 = $this->subTree->walk($visitor); |
|
222 | if ($result2 === NodeTraverser::REMOVE_NODE) { |
|
223 | $this->subTree = []; |
|
224 | } elseif ($result2 instanceof NodeInterface) { |
|
225 | $this->subTree = $result2; |
|
226 | } |
|
227 | } |
|
228 | } |
|
229 | ||
230 | return $visitor->leaveNode($node); |
|
231 | } |
|
232 | } |
|
233 |
@@ 195-223 (lines=29) @@ | ||
192 | * |
|
193 | * @param VisitorInterface $visitor |
|
194 | */ |
|
195 | public function walk(VisitorInterface $visitor) |
|
196 | { |
|
197 | $node = $this; |
|
198 | $result = $visitor->enterNode($node); |
|
199 | if ($result instanceof NodeInterface) { |
|
200 | $node = $result; |
|
201 | } |
|
202 | if ($result !== NodeTraverser::DONT_TRAVERSE_CHILDREN) { |
|
203 | if (is_array($this->refClause)) { |
|
204 | foreach ($this->refClause as $key => $operand) { |
|
205 | $result2 = $operand->walk($visitor); |
|
206 | if ($result2 === NodeTraverser::REMOVE_NODE) { |
|
207 | unset($this->refClause[$key]); |
|
208 | } elseif ($result2 instanceof NodeInterface) { |
|
209 | $this->refClause[$key] = $result2; |
|
210 | } |
|
211 | } |
|
212 | } elseif ($this->refClause) { |
|
213 | $result2 = $this->refClause->walk($visitor); |
|
214 | if ($result2 === NodeTraverser::REMOVE_NODE) { |
|
215 | $this->refClause = null; |
|
216 | } elseif ($result2 instanceof NodeInterface) { |
|
217 | $this->refClause = $result2; |
|
218 | } |
|
219 | } |
|
220 | } |
|
221 | ||
222 | return $visitor->leaveNode($node); |
|
223 | } |
|
224 | } |
|
225 |