Merge "store text length in local var in Preprocess::processToObj/Xml"
authorAaron Schulz <aschulz@wikimedia.org>
Wed, 15 Aug 2012 00:22:10 +0000 (00:22 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Wed, 15 Aug 2012 00:22:10 +0000 (00:22 +0000)
1  2 
includes/parser/Preprocessor_Hash.php
includes/parser/Preprocessor_HipHop.hphp

@@@ -177,6 -177,7 +177,7 @@@ class Preprocessor_Hash implements Prep
  
                $searchBase = "[{<\n";
                $revText = strrev( $text ); // For fast reverse searches
+               $lengthText = strlen( $text );
  
                $i = 0;                     # Input pointer, starts out pointing to a pseudo-newline before the start
                $accum =& $stack->getAccum();   # Current accumulator
                                        $accum->addLiteral( substr( $text, $i, $literalLength ) );
                                        $i += $literalLength;
                                }
-                               if ( $i >= strlen( $text ) ) {
+                               if ( $i >= $lengthText ) {
                                        if ( $currentClosing == "\n" ) {
                                                // Do a past-the-end run to finish off the heading
                                                $curChar = '';
                                                // Unclosed comment in input, runs to end
                                                $inner = substr( $text, $i );
                                                $accum->addNodeWithText( 'comment', $inner );
-                                               $i = strlen( $text );
+                                               $i = $lengthText;
                                        } else {
                                                // Search backwards for leading whitespace
-                                               $wsStart = $i ? ( $i - strspn( $revText, ' ', strlen( $text ) - $i ) ) : 0;
+                                               $wsStart = $i ? ( $i - strspn( $revText, ' ', $lengthText - $i ) ) : 0;
                                                // Search forwards for trailing whitespace
                                                // $wsEnd will be the position of the last space (or the '>' if there's none)
                                                $wsEnd = $endPos + 2 + strspn( $text, ' ', $endPos + 3 );
                                        } else {
                                                // No end tag -- let it run out to the end of the text.
                                                $inner = substr( $text, $tagEndPos + 1 );
-                                               $i = strlen( $text );
+                                               $i = $lengthText;
                                                $close = null;
                                        }
                                }
                                $part = $piece->getCurrentPart();
                                // Search back through the input to see if it has a proper close
                                // Do this using the reversed string since the other solutions (end anchor, etc.) are inefficient
-                               $wsLength = strspn( $revText, " \t", strlen( $text ) - $i );
+                               $wsLength = strspn( $revText, " \t", $lengthText - $i );
                                $searchStart = $i - $wsLength;
                                if ( isset( $part->commentEnd ) && $searchStart - 1 == $part->commentEnd ) {
                                        // Comment found at line end
                                        // Search for equals signs before the comment
                                        $searchStart = $part->visualEnd;
-                                       $searchStart -= strspn( $revText, " \t", strlen( $text ) - $searchStart );
+                                       $searchStart -= strspn( $revText, " \t", $lengthText - $searchStart );
                                }
                                $count = $piece->count;
-                               $equalsLength = strspn( $revText, '=', strlen( $text ) - $searchStart );
+                               $equalsLength = strspn( $revText, '=', $lengthText - $searchStart );
                                if ( $equalsLength > 0 ) {
                                        if ( $searchStart - $equalsLength == $piece->startPos ) {
                                                // This is just a single string of equals signs on its own line
@@@ -1574,7 -1575,7 +1575,7 @@@ class PPNode_Hash_Tree implements PPNod
                $children = array();
                for ( $child = $this->firstChild; $child; $child = $child->nextSibling ) {
                        if ( isset( $child->name ) && $child->name === $name ) {
 -                              $children[] = $name;
 +                              $children[] = $child;
                        }
                }
                return $children;
@@@ -115,7 -115,9 +115,9 @@@ class Preprocessor_HipHop implements Pr
                // Check cache.
                global $wgMemc, $wgPreprocessorCacheThreshold;
  
-               $cacheable = ($wgPreprocessorCacheThreshold !== false && strlen( $text ) > $wgPreprocessorCacheThreshold);
+               $lengthText = strlen( $text );
+               $cacheable = ($wgPreprocessorCacheThreshold !== false && $lengthText > $wgPreprocessorCacheThreshold);
                if ( $cacheable ) {
                        wfProfileIn( __METHOD__.'-cacheable' );
  
                                        $accum->addLiteral( strval( substr( $text, $i, $literalLength ) ) );
                                        $i += $literalLength;
                                }
-                               if ( $i >= strlen( $text ) ) {
+                               if ( $i >= $lengthText ) {
                                        if ( $currentClosing === "\n" ) {
                                                // Do a past-the-end run to finish off the heading
                                                $curChar = '';
                                                // Unclosed comment in input, runs to end
                                                $inner = strval( substr( $text, $i ) );
                                                $accum->addNodeWithText( 'comment', $inner );
-                                               $i = strlen( $text );
+                                               $i = $lengthText;
                                        } else {
                                                $endPos = intval( $variantEndPos );
                                                // Search backwards for leading whitespace
                                                if ( $i ) {
-                                                       $wsStart = $i - intval( strspn( $revText, ' ', strlen( $text ) - $i ) );
+                                                       $wsStart = $i - intval( strspn( $revText, ' ', $lengthText - $i ) );
                                                } else {
                                                        $wsStart = 0;
                                                }
                                        } else {
                                                // No end tag -- let it run out to the end of the text.
                                                $inner = strval( substr( $text, $tagEndPos + 1 ) );
-                                               $i = strlen( $text );
+                                               $i = $lengthText;
                                                $haveClose = false;
                                        }
                                }
                                $part = $piece->getCurrentPart();
                                // Search back through the input to see if it has a proper close
                                // Do this using the reversed string since the other solutions (end anchor, etc.) are inefficient
-                               $wsLength = intval( strspn( $revText, " \t", strlen( $text ) - $i ) );
+                               $wsLength = intval( strspn( $revText, " \t", $lengthText - $i ) );
                                $searchStart = $i - $wsLength;
                                if ( isset( $part->commentEnd ) && $searchStart - 1 == $part->commentEnd ) {
                                        // Comment found at line end
                                        // Search for equals signs before the comment
                                        $searchStart = intval( $part->visualEnd );
-                                       $searchStart -= intval( strspn( $revText, " \t", strlen( $text ) - $searchStart ) );
+                                       $searchStart -= intval( strspn( $revText, " \t", $lengthText - $searchStart ) );
                                }
                                $count = intval( $piece->count );
-                               $equalsLength = intval( strspn( $revText, '=', strlen( $text ) - $searchStart ) );
+                               $equalsLength = intval( strspn( $revText, '=', $lengthText - $searchStart ) );
                                $isTreeNode = false;
                                $resultAccum = $accum;
                                if ( $equalsLength > 0 ) {
@@@ -1758,7 -1760,7 +1760,7 @@@ class PPNode_HipHop_Tree implements PPN
                $children = array();
                for ( $child = $this->firstChild; $child; $child = $child->nextSibling ) {
                        if ( isset( $child->name ) && $child->name === $name ) {
 -                              $children[] = $name;
 +                              $children[] = $child;
                        }
                }
                return $children;