From 34a9ae4086c4a16efee10ed831e6bfdcbe56d461 Mon Sep 17 00:00:00 2001 From: Niko Sams Date: Tue, 29 Mar 2016 10:42:57 +0200 Subject: [PATCH] Performance: use decodePos in _addLastExtension --- Kwf/SourceMaps/SourceMap.php | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/Kwf/SourceMaps/SourceMap.php b/Kwf/SourceMaps/SourceMap.php index b6d13ff..3f490cd 100644 --- a/Kwf/SourceMaps/SourceMap.php +++ b/Kwf/SourceMaps/SourceMap.php @@ -429,37 +429,40 @@ protected function _addLastExtension() $lineCount = 0; $str = $this->_map->mappings; + $end = strlen($str); + $pos = 0; + + while ($pos < $end) { - while (strlen($str) > 0) { - if ($str[0] === ';') { - $str = substr($str, 1); + if ($str[$pos] === ';') { + $pos++; $previousGeneratedColumn = 0; $lineCount++; - } else if ($str[0] === ',') { - $str = substr($str, 1); + } else if ($str[$pos] === ',') { + $pos++; } else { // Generated column. - $previousGeneratedColumn += Kwf_SourceMaps_Base64VLQ::decode($str); + $previousGeneratedColumn += Kwf_SourceMaps_Base64VLQ::decodePos($str, $pos); - if (strlen($str) > 0 && !($str[0] == ',' || $str[0] == ';')) { + if ($pos < $end && !($str[$pos]==',' || $str[$pos]==';')) { // Original source. - $previousSource += Kwf_SourceMaps_Base64VLQ::decode($str); - if (strlen($str) === 0 || ($str[0] == ',' || $str[0] == ';')) { + $previousSource += Kwf_SourceMaps_Base64VLQ::decodePos($str, $pos); + if ($pos >= $end || ($str[$pos]==',' || $str[$pos]==';')) { throw new Exception('Found a source, but no line and column'); } // Original line. - $previousOriginalLine += Kwf_SourceMaps_Base64VLQ::decode($str); - if (strlen($str) === 0 || ($str[0] == ',' || $str[0] == ';')) { + $previousOriginalLine += Kwf_SourceMaps_Base64VLQ::decodePos($str, $pos); + if ($pos >= $end || ($str[$pos] == ',' || $str[$pos] == ';')) { throw new Exception('Found a source and line, but no column'); } // Original column. - $previousOriginalColumn += Kwf_SourceMaps_Base64VLQ::decode($str); + $previousOriginalColumn += Kwf_SourceMaps_Base64VLQ::decodePos($str, $pos); - if (strlen($str) > 0 && !($str[0] == ',' || $str[0] == ';')) { + if ($pos < $end && !($str[$pos] == ',' || $str[$pos] == ';')) { // Original name. - $previousName += Kwf_SourceMaps_Base64VLQ::decode($str); + $previousName += Kwf_SourceMaps_Base64VLQ::decodePos($str, $pos); } } }