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/JSGlobalObjectFunctions.cpp

    r48905 r52075  
    2828#include "CallFrame.h"
    2929#include "GlobalEvalFunction.h"
     30#include "Interpreter.h"
    3031#include "JSGlobalObject.h"
     32#include "JSString.h"
     33#include "Lexer.h"
    3134#include "LiteralParser.h"
    32 #include "JSString.h"
    33 #include "Interpreter.h"
     35#include "Nodes.h"
    3436#include "Parser.h"
     37#include "StringBuilder.h"
    3538#include "dtoa.h"
    36 #include "Lexer.h"
    37 #include "Nodes.h"
    3839#include <stdio.h>
    3940#include <stdlib.h>
     
    5657        return throwError(exec, URIError, "String contained an illegal UTF-16 sequence.");
    5758
    58     UString result = "";
     59    StringBuilder builder;
    5960    const char* p = cstr.c_str();
    6061    for (size_t k = 0; k < cstr.size(); k++, p++) {
    6162        char c = *p;
    6263        if (c && strchr(doNotEscape, c))
    63             result.append(c);
     64            builder.append(c);
    6465        else {
    6566            char tmp[4];
    66             sprintf(tmp, "%%%02X", static_cast<unsigned char>(c));
    67             result += tmp;
    68         }
    69     }
    70     return jsString(exec, result);
     67            snprintf(tmp, 4, "%%%02X", static_cast<unsigned char>(c));
     68            builder.append((const char*)tmp);
     69        }
     70    }
     71    return jsString(exec, builder.release());
    7172}
    7273
    7374static JSValue decode(ExecState* exec, const ArgList& args, const char* doNotUnescape, bool strict)
    7475{
    75     UString result = "";
     76    StringBuilder builder;
    7677    UString str = args.at(0).toString(exec);
    7778    int k = 0;
     
    107108                        else if (character >= 0x10000) {
    108109                            // Convert to surrogate pair.
    109                             result.append(static_cast<UChar>(0xD800 | ((character - 0x10000) >> 10)));
     110                            builder.append(static_cast<UChar>(0xD800 | ((character - 0x10000) >> 10)));
    110111                            u = static_cast<UChar>(0xDC00 | ((character - 0x10000) & 0x3FF));
    111112                        } else
     
    132133        }
    133134        k++;
    134         result.append(c);
    135     }
    136     return jsString(exec, result);
     135        builder.append(c);
     136    }
     137    return jsString(exec, builder.release());
    137138}
    138139
     
    377378        "*+-./@_";
    378379
    379     UString result = "";
     380    StringBuilder builder;
    380381    UString s;
    381382    UString str = args.at(0).toString(exec);
     
    394395            s = UString(tmp);
    395396        }
    396         result += s;
    397     }
    398 
    399     return jsString(exec, result);
     397        builder.append(s);
     398    }
     399
     400    return jsString(exec, builder.release());
    400401}
    401402
    402403JSValue JSC_HOST_CALL globalFuncUnescape(ExecState* exec, JSObject*, JSValue, const ArgList& args)
    403404{
    404     UString result = "";
     405    StringBuilder builder;
    405406    UString str = args.at(0).toString(exec);
    406407    int k = 0;
     
    421422        }
    422423        k++;
    423         result.append(*c);
    424     }
    425 
    426     return jsString(exec, result);
     424        builder.append(*c);
     425    }
     426
     427    return jsString(exec, builder.release());
    427428}
    428429
Note: See TracChangeset for help on using the changeset viewer.