/** * @param Scalar\LNumber $lNum * @param Context $context * @return bool */ public function pass(Scalar\LNumber $lNum, Context $context) { if ($lNum->getAttribute('kind') != Scalar\LNumber::KIND_DEC) { $context->notice('l_number_kind', 'Avoid using octal, hexadecimal or binary', $lNum); return true; } return false; }
public function pScalar_LNumber(Scalar\LNumber $node) { $str = (string) $node->value; switch ($node->getAttribute('kind', Scalar\LNumber::KIND_DEC)) { case Scalar\LNumber::KIND_BIN: return '0b' . base_convert($str, 10, 2); case Scalar\LNumber::KIND_OCT: return '0' . base_convert($str, 10, 8); case Scalar\LNumber::KIND_DEC: return $str; case Scalar\LNumber::KIND_HEX: return '0x' . base_convert($str, 10, 16); } throw new \Exception('Invalid number kind'); }
protected function pScalar_LNumber(Scalar\LNumber $node) { if ($node->value === -\PHP_INT_MAX-1) { // PHP_INT_MIN cannot be represented as a literal, // because the sign is not part of the literal return '(-' . \PHP_INT_MAX . '-1)'; } $kind = $node->getAttribute('kind', Scalar\LNumber::KIND_DEC); if (Scalar\LNumber::KIND_DEC === $kind) { return (string) $node->value; } $sign = $node->value < 0 ? '-' : ''; $str = (string) $node->value; switch ($kind) { case Scalar\LNumber::KIND_BIN: return $sign . '0b' . base_convert($str, 10, 2); case Scalar\LNumber::KIND_OCT: return $sign . '0' . base_convert($str, 10, 8); case Scalar\LNumber::KIND_HEX: return $sign . '0x' . base_convert($str, 10, 16); } throw new \Exception('Invalid number kind'); }