PluginProbe
WPIDE – File Manager & Code Editor / 3.5.10
WPIDE – File Manager & Code Editor v3.5.10
3.5.10 3.5.9 3.5.8 3.5.7 2.0.14 2.0.15 2.0.16 2.0.2 2.0.4 2.0.5 2.0.6 2.0.7 2.0.8 2.0.9 2.1 2.2 2.3 2.3.1 2.3.2 2.4.0 2.5 2.6 3.0 3.1 3.2 All 56 releases
wpide / vendor / nikic / php-parser / lib / PhpParser / Node / Scalar / LNumber.php

LNumber.php in WPIDE – File Manager & Code Editor 3.5.10, at vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/LNumber.php

81 lines 2.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php declare(strict_types=1);
2
3 namespace PhpParser\Node\Scalar;
4
5 use PhpParser\Error;
6 use PhpParser\Node\Scalar;
7
8 class LNumber extends Scalar
9 {
10 /* For use in "kind" attribute */
11 const KIND_BIN = 2;
12 const KIND_OCT = 8;
13 const KIND_DEC = 10;
14 const KIND_HEX = 16;
15
16 /** @var int Number value */
17 public $value;
18
19 /**
20 * Constructs an integer number scalar node.
21 *
22 * @param int $value Value of the number
23 * @param array $attributes Additional attributes
24 */
25 public function __construct(int $value, array $attributes = []) {
26 $this->attributes = $attributes;
27 $this->value = $value;
28 }
29
30 public function getSubNodeNames() : array {
31 return ['value'];
32 }
33
34 /**
35 * Constructs an LNumber node from a string number literal.
36 *
37 * @param string $str String number literal (decimal, octal, hex or binary)
38 * @param array $attributes Additional attributes
39 * @param bool $allowInvalidOctal Whether to allow invalid octal numbers (PHP 5)
40 *
41 * @return LNumber The constructed LNumber, including kind attribute
42 */
43 public static function fromString(string $str, array $attributes = [], bool $allowInvalidOctal = false) : LNumber {
44 $attributes['rawValue'] = $str;
45
46 $str = str_replace('_', '', $str);
47
48 if ('0' !== $str[0] || '0' === $str) {
49 $attributes['kind'] = LNumber::KIND_DEC;
50 return new LNumber((int) $str, $attributes);
51 }
52
53 if ('x' === $str[1] || 'X' === $str[1]) {
54 $attributes['kind'] = LNumber::KIND_HEX;
55 return new LNumber(hexdec($str), $attributes);
56 }
57
58 if ('b' === $str[1] || 'B' === $str[1]) {
59 $attributes['kind'] = LNumber::KIND_BIN;
60 return new LNumber(bindec($str), $attributes);
61 }
62
63 if (!$allowInvalidOctal && strpbrk($str, '89')) {
64 throw new Error('Invalid numeric literal', $attributes);
65 }
66
67 // Strip optional explicit octal prefix.
68 if ('o' === $str[1] || 'O' === $str[1]) {
69 $str = substr($str, 2);
70 }
71
72 // use intval instead of octdec to get proper cutting behavior with malformed numbers
73 $attributes['kind'] = LNumber::KIND_OCT;
74 return new LNumber(intval($str, 8), $attributes);
75 }
76
77 public function getType() : string {
78 return 'Scalar_LNumber';
79 }
80 }
81