Changeset 252721 in webkit
- Timestamp:
- Nov 20, 2019 5:16:22 PM (4 years ago)
- Location:
- trunk
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JSTests/ChangeLog
r252713 r252721 1 2019-11-20 Ross Kirsling <ross.kirsling@sony.com> 2 3 Unreviewed, address Darin's feedback on r252683. 4 5 * stress/string-replaceall.js: 6 1 7 2019-11-20 Caio Lima <ticaiolima@gmail.com> 2 8 -
trunk/JSTests/stress/string-replaceall.js
r252683 r252721 35 35 search[Symbol.replace] = RegExp.prototype[Symbol.replace].bind(search); 36 36 shouldBe('abcdefabcdefabc'.replaceAll(search, 'xyz'), 'abcxyzabcxyzabc'); 37 38 shouldBe('abc'.replaceAll('', 'z'), 'zazbzcz'); 39 shouldBe(''.replaceAll('', 'z'), 'z'); 40 shouldBe('abc'.replaceAll('', ''), 'abc'); 41 shouldBe(''.replaceAll('', ''), ''); -
trunk/Source/JavaScriptCore/ChangeLog
r252713 r252721 1 2019-11-20 Ross Kirsling <ross.kirsling@sony.com> 2 3 Unreviewed, address Darin's feedback on r252683. 4 5 * runtime/StringPrototype.cpp: 6 (JSC::replaceUsingStringSearch): 7 (JSC::replace): 8 (JSC::stringProtoFuncReplaceUsingStringSearch): 9 (JSC::stringProtoFuncReplaceAllUsingStringSearch): 10 1 11 2019-11-20 Caio Lima <ticaiolima@gmail.com> 2 12 -
trunk/Source/JavaScriptCore/runtime/StringPrototype.cpp
r252683 r252721 777 777 } 778 778 779 static ALWAYS_INLINE JSString* replaceUsingStringSearch(VM& vm, JSGlobalObject* globalObject, CallFrame* callFrame, JSString* jsString, JSValue searchValue, JSValue replaceValue, bool isGlobal) 779 enum class ReplaceMode : bool { Single, Global }; 780 781 static ALWAYS_INLINE JSString* replaceUsingStringSearch(VM& vm, JSGlobalObject* globalObject, CallFrame* callFrame, JSString* jsString, JSValue searchValue, JSValue replaceValue, ReplaceMode mode) 780 782 { 781 783 auto scope = DECLARE_THROW_SCOPE(vm); … … 814 816 cachedCall->appendArgument(jsNumber(matchStart)); 815 817 cachedCall->appendArgument(jsString); 816 if (UNLIKELY(cachedCall->hasOverflowedArguments())) 817 OUT_OF_MEMORY(globalObject, scope); 818 ASSERT(!cachedCall->hasOverflowedArguments()); 818 819 JSValue replacement = cachedCall->call(); 819 820 RETURN_IF_EXCEPTION(scope, nullptr); … … 826 827 827 828 size_t matchEnd = matchStart + searchStringLength; 828 int ovector[2] = { static_cast<int>(matchStart), static_cast<int>(matchEnd)}; 829 if (cachedCall) { 829 if (cachedCall) 830 830 replacements.append(replaceString); 831 RETURN_IF_EXCEPTION(scope, nullptr); 832 } else { 831 else { 833 832 StringBuilder replacement(StringBuilder::OverflowHandler::RecordOverflow); 833 int ovector[2] = { static_cast<int>(matchStart), static_cast<int>(matchEnd) }; 834 834 substituteBackreferences(replacement, replaceString, string, ovector, nullptr); 835 835 if (UNLIKELY(replacement.hasOverflowed())) … … 839 839 840 840 endOfLastMatch = matchEnd; 841 if ( !isGlobal)841 if (mode == ReplaceMode::Single) 842 842 break; 843 matchStart = string.find(searchString, UNLIKELY(!searchStringLength)? endOfLastMatch + 1 : endOfLastMatch);843 matchStart = string.find(searchString, !searchStringLength ? endOfLastMatch + 1 : endOfLastMatch); 844 844 } while (matchStart != notFound); 845 845 … … 902 902 if (searchValue.inherits<RegExpObject>(vm)) 903 903 return replaceUsingRegExpSearch(vm, globalObject, callFrame, string, searchValue, replaceValue); 904 constexpr bool isGlobal = false; 905 return replaceUsingStringSearch(vm, globalObject, callFrame, string, searchValue, replaceValue, isGlobal); 904 return replaceUsingStringSearch(vm, globalObject, callFrame, string, searchValue, replaceValue, ReplaceMode::Single); 906 905 } 907 906 … … 943 942 RETURN_IF_EXCEPTION(scope, encodedJSValue()); 944 943 945 constexpr bool isGlobal = false; 946 RELEASE_AND_RETURN(scope, JSValue::encode(replaceUsingStringSearch(vm, globalObject, callFrame, string, callFrame->argument(0), callFrame->argument(1), isGlobal))); 944 RELEASE_AND_RETURN(scope, JSValue::encode(replaceUsingStringSearch(vm, globalObject, callFrame, string, callFrame->argument(0), callFrame->argument(1), ReplaceMode::Single))); 947 945 } 948 946 … … 955 953 RETURN_IF_EXCEPTION(scope, encodedJSValue()); 956 954 957 constexpr bool isGlobal = true; 958 RELEASE_AND_RETURN(scope, JSValue::encode(replaceUsingStringSearch(vm, globalObject, callFrame, string, callFrame->argument(0), callFrame->argument(1), isGlobal))); 955 RELEASE_AND_RETURN(scope, JSValue::encode(replaceUsingStringSearch(vm, globalObject, callFrame, string, callFrame->argument(0), callFrame->argument(1), ReplaceMode::Global))); 959 956 } 960 957 -
trunk/Source/WTF/ChangeLog
r252717 r252721 1 2019-11-20 Ross Kirsling <ross.kirsling@sony.com> 2 3 Unreviewed, address Darin's feedback on r252683. 4 5 * wtf/text/StringCommon.h: 6 (WTF::findCommon): 7 1 8 2019-11-20 ChangSeok Oh <changseok@webkit.org> 2 9 -
trunk/Source/WTF/wtf/text/StringCommon.h
r252683 r252721 575 575 576 576 if (!needleLength) 577 return st d::min(start, haystack.length());577 return start; 578 578 579 579 unsigned searchLength = haystack.length() - start;
Note: See TracChangeset
for help on using the changeset viewer.