Ignore:
Timestamp:
Dec 13, 2009, 4:27:07 PM (15 years ago)
Author:
[email protected]
Message:

https://bugs.webkit.org/show_bug.cgi?id=32496
Switch remaining cases of string construction to use StringBuilder.
Builds strings using a vector rather than using string append / addition.

Reviewed by Sam Weinig.

(JSC::FunctionExecutable::paramString):

  • runtime/FunctionConstructor.cpp:

(JSC::constructFunction):

  • runtime/JSGlobalObjectFunctions.cpp:

(JSC::encode):
(JSC::decode):
(JSC::globalFuncEscape):
(JSC::globalFuncUnescape):

  • runtime/JSONObject.cpp:

(JSC::Stringifier::stringify):
(JSC::Stringifier::indent):

  • runtime/JSString.h:
  • runtime/LiteralParser.cpp:

(JSC::LiteralParser::Lexer::lexString):

  • runtime/NumberPrototype.cpp:

(JSC::integerPartNoExp):
(JSC::numberProtoFuncToFixed):
(JSC::numberProtoFuncToPrecision):

  • runtime/Operations.h:

(JSC::jsString):

  • runtime/StringPrototype.cpp:

(JSC::substituteBackreferencesSlow):
(JSC::substituteBackreferences):
(JSC::stringProtoFuncConcat):

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/runtime/LiteralParser.cpp

    r47828 r52075  
    3030#include "JSString.h"
    3131#include "Lexer.h"
     32#include "StringBuilder.h"
    3233#include <wtf/ASCIICType.h>
    3334#include <wtf/dtoa.h>
     
    135136    ++m_ptr;
    136137    const UChar* runStart;
    137     token.stringToken = UString();
     138    StringBuilder builder;
    138139    do {
    139140        runStart = m_ptr;
     
    141142            ++m_ptr;
    142143        if (runStart < m_ptr)
    143             token.stringToken.append(runStart, m_ptr - runStart);
     144            builder.append(runStart, m_ptr - runStart);
    144145        if ((mode == StrictJSON) && m_ptr < m_end && *m_ptr == '\\') {
    145146            ++m_ptr;
     
    148149            switch (*m_ptr) {
    149150                case '"':
    150                     token.stringToken.append('"');
     151                    builder.append('"');
    151152                    m_ptr++;
    152153                    break;
    153154                case '\\':
    154                     token.stringToken.append('\\');
     155                    builder.append('\\');
    155156                    m_ptr++;
    156157                    break;
    157158                case '/':
    158                     token.stringToken.append('/');
     159                    builder.append('/');
    159160                    m_ptr++;
    160161                    break;
    161162                case 'b':
    162                     token.stringToken.append('\b');
     163                    builder.append('\b');
    163164                    m_ptr++;
    164165                    break;
    165166                case 'f':
    166                     token.stringToken.append('\f');
     167                    builder.append('\f');
    167168                    m_ptr++;
    168169                    break;
    169170                case 'n':
    170                     token.stringToken.append('\n');
     171                    builder.append('\n');
    171172                    m_ptr++;
    172173                    break;
    173174                case 'r':
    174                     token.stringToken.append('\r');
     175                    builder.append('\r');
    175176                    m_ptr++;
    176177                    break;
    177178                case 't':
    178                     token.stringToken.append('\t');
     179                    builder.append('\t');
    179180                    m_ptr++;
    180181                    break;
     
    187188                            return TokError;
    188189                    }
    189                     token.stringToken.append(JSC::Lexer::convertUnicode(m_ptr[1], m_ptr[2], m_ptr[3], m_ptr[4]));
     190                    builder.append(JSC::Lexer::convertUnicode(m_ptr[1], m_ptr[2], m_ptr[3], m_ptr[4]));
    190191                    m_ptr += 5;
    191192                    break;
     
    200201        return TokError;
    201202
     203    token.stringToken = builder.release();
    202204    token.type = TokString;
    203205    token.end = ++m_ptr;
Note: See TracChangeset for help on using the changeset viewer.