Mercurial > hg > isophonics-drupal-site
diff vendor/psy/psysh/src/CodeCleaner/ListPass.php @ 17:129ea1e6d783
Update, including to Drupal core 8.6.10
author | Chris Cannam |
---|---|
date | Thu, 28 Feb 2019 13:21:36 +0000 |
parents | c2387f117808 |
children |
line wrap: on
line diff
--- a/vendor/psy/psysh/src/CodeCleaner/ListPass.php Tue Jul 10 15:07:59 2018 +0100 +++ b/vendor/psy/psysh/src/CodeCleaner/ListPass.php Thu Feb 28 13:21:36 2019 +0000 @@ -12,10 +12,15 @@ namespace Psy\CodeCleaner; use PhpParser\Node; +use PhpParser\Node\Expr; use PhpParser\Node\Expr\Array_; +use PhpParser\Node\Expr\ArrayDimFetch; use PhpParser\Node\Expr\ArrayItem; use PhpParser\Node\Expr\Assign; +use PhpParser\Node\Expr\FuncCall; use PhpParser\Node\Expr\List_; +use PhpParser\Node\Expr\MethodCall; +use PhpParser\Node\Expr\PropertyFetch; use PhpParser\Node\Expr\Variable; use Psy\Exception\ParseErrorException; @@ -28,7 +33,7 @@ public function __construct() { - $this->atLeastPhp71 = version_compare(PHP_VERSION, '7.1', '>='); + $this->atLeastPhp71 = \version_compare(PHP_VERSION, '7.1', '>='); } /** @@ -74,9 +79,7 @@ throw new ParseErrorException($msg, $item->key->getLine()); } - $value = ($item instanceof ArrayItem) ? $item->value : $item; - - if (!$value instanceof Variable) { + if (!self::isValidArrayItem($item)) { $msg = 'Assignments can only happen to writable values'; throw new ParseErrorException($msg, $item->getLine()); } @@ -86,4 +89,24 @@ throw new ParseErrorException('Cannot use empty list'); } } + + /** + * Validate whether a given item in an array is valid for short assignment. + * + * @param Expr $item + * + * @return bool + */ + private static function isValidArrayItem(Expr $item) + { + $value = ($item instanceof ArrayItem) ? $item->value : $item; + + while ($value instanceof ArrayDimFetch || $value instanceof PropertyFetch) { + $value = $value->var; + } + + // We just kind of give up if it's a method call. We can't tell if it's + // valid via static analysis. + return $value instanceof Variable || $value instanceof MethodCall || $value instanceof FuncCall; + } }