Merge pull request #106 from AndreasHeiberg/fix-to-string-node

Fix __toString() for AST Nodes
This commit is contained in:
Vladimir Razuvaev 2017-04-24 18:04:02 +07:00 committed by GitHub
commit 5948d5198e

View File

@ -80,12 +80,46 @@ abstract class Node
* @return string * @return string
*/ */
public function __toString() 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 = (array) $this;
$tmp['loc'] = [ $tmp['loc'] = [
'start' => $this->loc->start, 'start' => $this->loc->start,
'end' => $this->loc->end '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);
}
}
} }
} }