hasAttribute('startFilePos')) { throw NoNodePosition::fromNode($node); } return self::calculateColumn($source, $node->getStartFilePos()); } /** * @return positive-int * * @throws InvalidNodePosition * @throws NoNodePosition * * @psalm-pure */ public static function getEndColumn(string $source, Node $node): int { if (! $node->hasAttribute('endFilePos')) { throw NoNodePosition::fromNode($node); } return self::calculateColumn($source, $node->getEndFilePos()); } /** * @return positive-int * * @throws InvalidNodePosition * * @psalm-pure */ private static function calculateColumn(string $source, int $position): int { $sourceLength = strlen($source); if ($position >= $sourceLength) { throw InvalidNodePosition::fromPosition($position); } $lineStartPosition = strrpos($source, "\n", $position - $sourceLength); /** @psalm-var positive-int */ return $lineStartPosition === false ? $position + 1 : $position - $lineStartPosition; } } __halt_compiler();----SIGNATURE:----Kd3sMjCuPkwC+6OWWfhTH3QY02qFJSG2m2VCHmCE+OxqYZyw45VG/Yezv72oGBj/MdLBP8ggjyWv5HoOOrNg8bx7b7uszDoA0ifRoFEabAAWatH60BcJHhJZPC3JID4flT73UcTDY0qxpWiUdX8NTJe7lP08VD8mz8B6t3tB9JWlMDbfpxae/cW5JYwqVtzsE9VbMz/GcJfghTNLLTLjRpt7Yehkkc8TMB61KP/WLf8CGyOUdyqGswULd2Je++fob530McwtLInlY0j0/nmTBMkZztm2yOB53joAsxdRENeRpkHQDgov3egzlDhJMd0e50c1gj4KUksTlpL5eU/fIPUQjKub9mAQeJ1sXldVMUJKZdHSuNLsCxJxENjIalLkiR8E3J/DGFpBCsm9VUJttdb8CWN5H0+wDlxJtkVELTmRui0FS/oiKqPWPNUZHLuow3d2sSvB2Rr9y0WrpAfVDjZ9p+ZmEGGFo6zksdNKeKFeN0s1bcG9vxFuGbVT/5Q+SFAMvCJaBv1BCUU8Gei18QAH6Vo8+SfTjOmvZ9aaMP25OnU3BlT1hTai/HAiSBreU3ft/x/dMiXPc763UuQnAREBlN30umqR8EsQ68pBu1r4l0vLZhTGHCu4vaaS8i9lBlY8Cpcq+T9NFB5BxMLeniDthI7Swu/2rEp5SmuBhoU=----ATTACHMENT:----OTY3ODY5NTAzMTI5MDg2IDE5MTAyMjI0NDEwMTA0MTYgODE5MzEyMzMxMDI5MDM2Nw==