diff options
Diffstat (limited to 'src/3rdparty/webkit/JavaScriptCore/runtime/RegExpPrototype.cpp')
-rw-r--r-- | src/3rdparty/webkit/JavaScriptCore/runtime/RegExpPrototype.cpp | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/src/3rdparty/webkit/JavaScriptCore/runtime/RegExpPrototype.cpp b/src/3rdparty/webkit/JavaScriptCore/runtime/RegExpPrototype.cpp index bbc9e85b57..dd5fe0252f 100644 --- a/src/3rdparty/webkit/JavaScriptCore/runtime/RegExpPrototype.cpp +++ b/src/3rdparty/webkit/JavaScriptCore/runtime/RegExpPrototype.cpp @@ -27,6 +27,7 @@ #include "JSFunction.h" #include "JSObject.h" #include "JSString.h" +#include "JSStringBuilder.h" #include "JSValue.h" #include "ObjectPrototype.h" #include "PrototypeFunction.h" @@ -91,7 +92,7 @@ JSValue JSC_HOST_CALL regExpProtoFuncCompile(ExecState* exec, JSObject*, JSValue } if (!regExp->isValid()) - return throwError(exec, SyntaxError, UString("Invalid regular expression: ").append(regExp->errorMessage())); + return throwError(exec, SyntaxError, makeString("Invalid regular expression: ", regExp->errorMessage())); asRegExpObject(thisValue)->setRegExp(regExp.release()); asRegExpObject(thisValue)->setLastIndex(0); @@ -106,15 +107,17 @@ JSValue JSC_HOST_CALL regExpProtoFuncToString(ExecState* exec, JSObject*, JSValu return throwError(exec, TypeError); } - UString result = "/" + asRegExpObject(thisValue)->get(exec, exec->propertyNames().source).toString(exec); - result.append('/'); + char postfix[5] = { '/', 0, 0, 0, 0 }; + int index = 1; if (asRegExpObject(thisValue)->get(exec, exec->propertyNames().global).toBoolean(exec)) - result.append('g'); + postfix[index++] = 'g'; if (asRegExpObject(thisValue)->get(exec, exec->propertyNames().ignoreCase).toBoolean(exec)) - result.append('i'); + postfix[index++] = 'i'; if (asRegExpObject(thisValue)->get(exec, exec->propertyNames().multiline).toBoolean(exec)) - result.append('m'); - return jsNontrivialString(exec, result); + postfix[index] = 'm'; + UString source = asRegExpObject(thisValue)->get(exec, exec->propertyNames().source).toString(exec); + // If source is empty, use "/(?:)/" to avoid colliding with comment syntax + return jsMakeNontrivialString(exec, "/", source.size() ? source : UString("(?:)"), postfix); } } // namespace JSC |