diff vendor/nikic/php-parser/lib/PhpParser/NodeAbstract.php @ 13:5fb285c0d0e3

Update Drupal core to 8.4.7 via Composer. Security update; I *think* we've been lucky to get away with this so far, as we don't support self-registration which seems to be used by the so-called "drupalgeddon 2" attack that 8.4.5 was vulnerable to.
author Chris Cannam
date Mon, 23 Apr 2018 09:33:26 +0100
parents 7a779792577d
children 129ea1e6d783
line wrap: on
line diff
--- a/vendor/nikic/php-parser/lib/PhpParser/NodeAbstract.php	Fri Feb 23 15:52:07 2018 +0000
+++ b/vendor/nikic/php-parser/lib/PhpParser/NodeAbstract.php	Mon Apr 23 09:33:26 2018 +0100
@@ -1,7 +1,9 @@
-<?php
+<?php declare(strict_types=1);
 
 namespace PhpParser;
 
+use PhpParser\Node;
+
 abstract class NodeAbstract implements Node, \JsonSerializable
 {
     protected $attributes;
@@ -11,45 +13,98 @@
      *
      * @param array $attributes Array of attributes
      */
-    public function __construct(array $attributes = array()) {
+    public function __construct(array $attributes = []) {
         $this->attributes = $attributes;
     }
 
     /**
-     * Gets the type of the node.
+     * Gets line the node started in (alias of getStartLine).
      *
-     * @return string Type of the node
+     * @return int Start line (or -1 if not available)
      */
-    public function getType() {
-        $className = rtrim(get_class($this), '_');
-        return strtr(
-            substr(
-                $className,
-                strpos($className, 'PhpParser\Node') + 15
-            ),
-            '\\',
-            '_'
-        );
+    public function getLine() : int {
+        return $this->attributes['startLine'] ?? -1;
     }
 
     /**
      * Gets line the node started in.
      *
-     * @return int Line
+     * Requires the 'startLine' attribute to be enabled in the lexer (enabled by default).
+     *
+     * @return int Start line (or -1 if not available)
      */
-    public function getLine() {
-        return $this->getAttribute('startLine', -1);
+    public function getStartLine() : int {
+        return $this->attributes['startLine'] ?? -1;
     }
 
     /**
-     * Sets line the node started in.
+     * Gets the line the node ended in.
      *
-     * @param int $line Line
+     * Requires the 'endLine' attribute to be enabled in the lexer (enabled by default).
      *
-     * @deprecated
+     * @return int End line (or -1 if not available)
      */
-    public function setLine($line) {
-        $this->setAttribute('startLine', (int) $line);
+    public function getEndLine() : int {
+        return $this->attributes['endLine'] ?? -1;
+    }
+
+    /**
+     * Gets the token offset of the first token that is part of this node.
+     *
+     * The offset is an index into the array returned by Lexer::getTokens().
+     *
+     * Requires the 'startTokenPos' attribute to be enabled in the lexer (DISABLED by default).
+     *
+     * @return int Token start position (or -1 if not available)
+     */
+    public function getStartTokenPos() : int {
+        return $this->attributes['startTokenPos'] ?? -1;
+    }
+
+    /**
+     * Gets the token offset of the last token that is part of this node.
+     *
+     * The offset is an index into the array returned by Lexer::getTokens().
+     *
+     * Requires the 'endTokenPos' attribute to be enabled in the lexer (DISABLED by default).
+     *
+     * @return int Token end position (or -1 if not available)
+     */
+    public function getEndTokenPos() : int {
+        return $this->attributes['endTokenPos'] ?? -1;
+    }
+
+    /**
+     * Gets the file offset of the first character that is part of this node.
+     *
+     * Requires the 'startFilePos' attribute to be enabled in the lexer (DISABLED by default).
+     *
+     * @return int File start position (or -1 if not available)
+     */
+    public function getStartFilePos() : int {
+        return $this->attributes['startFilePos'] ?? -1;
+    }
+
+    /**
+     * Gets the file offset of the last character that is part of this node.
+     *
+     * Requires the 'endFilePos' attribute to be enabled in the lexer (DISABLED by default).
+     *
+     * @return int File end position (or -1 if not available)
+     */
+    public function getEndFilePos() : int {
+        return $this->attributes['endFilePos'] ?? -1;
+    }
+
+    /**
+     * Gets all comments directly preceding this node.
+     *
+     * The comments are also available through the "comments" attribute.
+     *
+     * @return Comment[]
+     */
+    public function getComments() : array {
+        return $this->attributes['comments'] ?? [];
     }
 
     /**
@@ -60,7 +115,7 @@
      * @return null|Comment\Doc Doc comment object or null
      */
     public function getDocComment() {
-        $comments = $this->getAttribute('comments');
+        $comments = $this->getComments();
         if (!$comments) {
             return null;
         }
@@ -81,7 +136,7 @@
      * @param Comment\Doc $docComment Doc comment to set
      */
     public function setDocComment(Comment\Doc $docComment) {
-        $comments = $this->getAttribute('comments', []);
+        $comments = $this->getComments();
 
         $numComments = count($comments);
         if ($numComments > 0 && $comments[$numComments - 1] instanceof Comment\Doc) {
@@ -95,15 +150,15 @@
         $this->setAttribute('comments', $comments);
     }
 
-    public function setAttribute($key, $value) {
+    public function setAttribute(string $key, $value) {
         $this->attributes[$key] = $value;
     }
 
-    public function hasAttribute($key) {
+    public function hasAttribute(string $key) : bool {
         return array_key_exists($key, $this->attributes);
     }
 
-    public function &getAttribute($key, $default = null) {
+    public function getAttribute(string $key, $default = null) {
         if (!array_key_exists($key, $this->attributes)) {
             return $default;
         } else {
@@ -111,11 +166,18 @@
         }
     }
 
-    public function getAttributes() {
+    public function getAttributes() : array {
         return $this->attributes;
     }
 
-    public function jsonSerialize() {
+    public function setAttributes(array $attributes) {
+        $this->attributes = $attributes;
+    }
+
+    /**
+     * @return array
+     */
+    public function jsonSerialize() : array {
         return ['nodeType' => $this->getType()] + get_object_vars($this);
     }
 }