fix __toString() for AST Node

previously it would only shallowly convert to array causing json_encode to fail
This commit is contained in:
Andreas Heiberg 2017-04-07 11:34:33 +01:00
parent cb40df220e
commit ed8bf4e2b2

View File

@ -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);
}
}
}
}