diff --git a/src/Language/AST/Node.php b/src/Language/AST/Node.php index ce5a77b..fc3349c 100644 --- a/src/Language/AST/Node.php +++ b/src/Language/AST/Node.php @@ -80,12 +80,46 @@ abstract class Node * @return string */ public function __toString() + { + $tmp = $this->toArray(); + $tmp['loc'] = [ + 'start' => $this->loc->start, + 'end' => $this->loc->end + ]; + + return json_encode($tmp); + } + + /** + * @return array + */ + public function toArray() { $tmp = (array) $this; $tmp['loc'] = [ 'start' => $this->loc->start, 'end' => $this->loc->end ]; - return json_encode($tmp); + + $this->recursiveToArray($tmp); + + return $tmp; + } + + /** + * @param $object + */ + public function recursiveToArray(&$object) + { + if ($object instanceof Node) { + /** @var Node $object */ + $object = $object->toArray(); + } elseif (is_object($object)) { + $object = (array) $object; + } elseif (is_array($object)) { + foreach ($object as &$o) { + $this->recursiveToArray($o); + } + } } }