Mercurial > hg > cmmr2012-drupal-site
comparison vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/DNumber.php @ 0:c75dbcec494b
Initial commit from drush-created site
author | Chris Cannam |
---|---|
date | Thu, 05 Jul 2018 14:24:15 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:c75dbcec494b |
---|---|
1 <?php declare(strict_types=1); | |
2 | |
3 namespace PhpParser\Node\Scalar; | |
4 | |
5 use PhpParser\Node\Scalar; | |
6 | |
7 class DNumber extends Scalar | |
8 { | |
9 /** @var float Number value */ | |
10 public $value; | |
11 | |
12 /** | |
13 * Constructs a float number scalar node. | |
14 * | |
15 * @param float $value Value of the number | |
16 * @param array $attributes Additional attributes | |
17 */ | |
18 public function __construct(float $value, array $attributes = []) { | |
19 parent::__construct($attributes); | |
20 $this->value = $value; | |
21 } | |
22 | |
23 public function getSubNodeNames() : array { | |
24 return ['value']; | |
25 } | |
26 | |
27 /** | |
28 * @internal | |
29 * | |
30 * Parses a DNUMBER token like PHP would. | |
31 * | |
32 * @param string $str A string number | |
33 * | |
34 * @return float The parsed number | |
35 */ | |
36 public static function parse(string $str) : float { | |
37 // if string contains any of .eE just cast it to float | |
38 if (false !== strpbrk($str, '.eE')) { | |
39 return (float) $str; | |
40 } | |
41 | |
42 // otherwise it's an integer notation that overflowed into a float | |
43 // if it starts with 0 it's one of the special integer notations | |
44 if ('0' === $str[0]) { | |
45 // hex | |
46 if ('x' === $str[1] || 'X' === $str[1]) { | |
47 return hexdec($str); | |
48 } | |
49 | |
50 // bin | |
51 if ('b' === $str[1] || 'B' === $str[1]) { | |
52 return bindec($str); | |
53 } | |
54 | |
55 // oct | |
56 // substr($str, 0, strcspn($str, '89')) cuts the string at the first invalid digit (8 or 9) | |
57 // so that only the digits before that are used | |
58 return octdec(substr($str, 0, strcspn($str, '89'))); | |
59 } | |
60 | |
61 // dec | |
62 return (float) $str; | |
63 } | |
64 | |
65 public function getType() : string { | |
66 return 'Scalar_DNumber'; | |
67 } | |
68 } |