Changeset 199511 in webkit
- Timestamp:
- Apr 13, 2016 1:00:31 PM (8 years ago)
- Location:
- trunk
- Files:
-
- 18 added
- 27 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r199510 r199511 1 2016-04-13 Mark Lam <mark.lam@apple.com> 2 3 ES6: Implement RegExp.prototype[@@search]. 4 https://bugs.webkit.org/show_bug.cgi?id=156331 5 6 Reviewed by Keith Miller. 7 8 * js/regress/regexp-prototype-search-observable-side-effects-expected.txt: Added. 9 * js/regress/regexp-prototype-search-observable-side-effects.html: Added. 10 * js/regress/regexp-prototype-search-observable-side-effects2-expected.txt: Added. 11 * js/regress/regexp-prototype-search-observable-side-effects2.html: Added. 12 13 * js/regress/script-tests/regexp-prototype-search-observable-side-effects.js: Added. 14 * js/regress/script-tests/regexp-prototype-search-observable-side-effects2.js: Added. 15 16 * js/regress/script-tests/string-prototype-search-observable-side-effects.js: Added. 17 * js/regress/script-tests/string-prototype-search-observable-side-effects2.js: Added. 18 * js/regress/script-tests/string-prototype-search-observable-side-effects3.js: Added. 19 * js/regress/script-tests/string-prototype-search-observable-side-effects4.js: Added. 20 21 * js/regress/string-prototype-search-observable-side-effects-expected.txt: Added. 22 * js/regress/string-prototype-search-observable-side-effects.html: Added. 23 * js/regress/string-prototype-search-observable-side-effects2-expected.txt: Added. 24 * js/regress/string-prototype-search-observable-side-effects2.html: Added. 25 * js/regress/string-prototype-search-observable-side-effects3-expected.txt: Added. 26 * js/regress/string-prototype-search-observable-side-effects3.html: Added. 27 * js/regress/string-prototype-search-observable-side-effects4-expected.txt: Added. 28 * js/regress/string-prototype-search-observable-side-effects4.html: Added. 29 1 30 2016-04-13 Jiewen Tan <jiewen_tan@apple.com> 2 31 -
trunk/Source/JavaScriptCore/ChangeLog
r199508 r199511 1 2016-04-13 Mark Lam <mark.lam@apple.com> 2 3 ES6: Implement RegExp.prototype[@@search]. 4 https://bugs.webkit.org/show_bug.cgi?id=156331 5 6 Reviewed by Keith Miller. 7 8 What changed? 9 1. Implemented search builtin in RegExpPrototype.js. 10 The native path is now used as a fast path. 11 2. Added DFG support for an IsRegExpObjectIntrinsic (modelled after the 12 IsJSArrayIntrinsic). 13 3. Renamed @isRegExp to @isRegExpObject to match the new IsRegExpObjectIntrinsic. 14 4. Change the esSpecIsRegExpObject() implementation to check if the object's 15 JSType is RegExpObjectType instead of walking the classinfo chain. 16 17 * builtins/RegExpPrototype.js: 18 (search): 19 * builtins/StringPrototype.js: 20 (search): 21 - fixed some indentation. 22 23 * dfg/DFGAbstractInterpreterInlines.h: 24 (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects): 25 * dfg/DFGByteCodeParser.cpp: 26 (JSC::DFG::ByteCodeParser::handleIntrinsicCall): 27 * dfg/DFGClobberize.h: 28 (JSC::DFG::clobberize): 29 * dfg/DFGDoesGC.cpp: 30 (JSC::DFG::doesGC): 31 * dfg/DFGFixupPhase.cpp: 32 (JSC::DFG::FixupPhase::fixupNode): 33 * dfg/DFGNodeType.h: 34 * dfg/DFGPredictionPropagationPhase.cpp: 35 (JSC::DFG::PredictionPropagationPhase::propagate): 36 * dfg/DFGSafeToExecute.h: 37 (JSC::DFG::safeToExecute): 38 * dfg/DFGSpeculativeJIT.cpp: 39 (JSC::DFG::SpeculativeJIT::compileIsArrayConstructor): 40 (JSC::DFG::SpeculativeJIT::compileIsRegExpObject): 41 (JSC::DFG::SpeculativeJIT::compileCallObjectConstructor): 42 * dfg/DFGSpeculativeJIT.h: 43 * dfg/DFGSpeculativeJIT32_64.cpp: 44 (JSC::DFG::SpeculativeJIT::compile): 45 * dfg/DFGSpeculativeJIT64.cpp: 46 (JSC::DFG::SpeculativeJIT::compile): 47 * ftl/FTLCapabilities.cpp: 48 (JSC::FTL::canCompile): 49 * ftl/FTLLowerDFGToB3.cpp: 50 (JSC::FTL::DFG::LowerDFGToB3::compileNode): 51 (JSC::FTL::DFG::LowerDFGToB3::compileIsFunction): 52 (JSC::FTL::DFG::LowerDFGToB3::compileIsRegExpObject): 53 (JSC::FTL::DFG::LowerDFGToB3::compileTypeOf): 54 (JSC::FTL::DFG::LowerDFGToB3::isExoticForTypeof): 55 (JSC::FTL::DFG::LowerDFGToB3::isRegExpObject): 56 (JSC::FTL::DFG::LowerDFGToB3::isType): 57 * runtime/Intrinsic.h: 58 - Added IsRegExpObjectIntrinsic. 59 60 * runtime/CommonIdentifiers.h: 61 62 * runtime/ECMAScriptSpecInternalFunctions.cpp: 63 (JSC::esSpecIsConstructor): 64 - Changed to use uncheckedArgument since this is only called from internal code. 65 (JSC::esSpecIsRegExpObject): 66 (JSC::esSpecIsRegExp): Deleted. 67 * runtime/ECMAScriptSpecInternalFunctions.h: 68 - Changed to check the object for a JSType of RegExpObjectType. 69 70 * runtime/JSGlobalObject.cpp: 71 (JSC::JSGlobalObject::init): 72 - Added split fast path. 73 74 * runtime/RegExpPrototype.cpp: 75 (JSC::RegExpPrototype::finishCreation): 76 (JSC::regExpProtoFuncSearchFast): 77 (JSC::regExpProtoFuncSearch): Deleted. 78 * runtime/RegExpPrototype.h: 79 80 * tests/es6.yaml: 81 * tests/stress/regexp-search.js: 82 - Rebased test. 83 1 84 2016-04-12 Filip Pizlo <fpizlo@apple.com> 2 85 -
trunk/Source/JavaScriptCore/builtins/RegExpPrototype.js
r199502 r199511 109 109 } 110 110 111 // 21.2.5.9 RegExp.prototype[@@search] (string) 112 function search(strArg) 113 { 114 "use strict"; 115 116 let regexp = this; 117 118 // Check for observable side effects and call the fast path if there aren't any. 119 if (@isRegExpObject(regexp) && @tryGetById(regexp, "exec") === @RegExp.prototype.@exec) 120 return @regExpSearchFast.@call(regexp, strArg); 121 122 // 1. Let rx be the this value. 123 // 2. If Type(rx) is not Object, throw a TypeError exception. 124 if (!@isObject(this)) 125 throw new @TypeError("RegExp.prototype.@@search requires that |this| be an Object"); 126 127 // 3. Let S be ? ToString(string). 128 let str = @toString(strArg) 129 130 // 4. Let previousLastIndex be ? Get(rx, "lastIndex"). 131 let previousLastIndex = regexp.lastIndex; 132 // 5. Perform ? Set(rx, "lastIndex", 0, true). 133 regexp.lastIndex = 0; 134 // 6. Let result be ? RegExpExec(rx, S). 135 let result = @regExpExec(regexp, str); 136 // 7. Perform ? Set(rx, "lastIndex", previousLastIndex, true). 137 regexp.lastIndex = previousLastIndex; 138 // 8. If result is null, return -1. 139 if (result === null) 140 return -1; 141 // 9. Return ? Get(result, "index"). 142 return result.index; 143 } 144 111 145 function hasObservableSideEffectsForRegExpSplit(regexp) { 112 146 // This is accessed by the RegExpExec internal function. … … 142 176 return true; 143 177 144 return !@isRegExp (regexp);178 return !@isRegExpObject(regexp); 145 179 } 146 180 -
trunk/Source/JavaScriptCore/builtins/StringPrototype.js
r199502 r199511 58 58 59 59 if (regexp != null) { 60 61 60 var searcher = regexp[@symbolSearch]; 61 if (searcher != @undefined) 62 62 return searcher.@call(regexp, this); 63 63 } -
trunk/Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h
r199397 r199511 975 975 case IsObject: 976 976 case IsObjectOrNull: 977 case IsFunction: { 977 case IsFunction: 978 case IsRegExpObject: { 978 979 AbstractValue child = forNode(node->child1()); 979 980 if (child.value()) { … … 1050 1051 setConstant(node, jsBoolean(false)); 1051 1052 break; 1053 case IsRegExpObject: 1054 setConstant(node, jsBoolean(child.value().isObject() && child.value().getObject()->type() == RegExpObjectType)); 1055 break; 1052 1056 default: 1053 1057 constantWasSet = false; … … 1192 1196 } 1193 1197 break; 1198 1199 case IsRegExpObject: 1200 // We don't have a SpeculatedType for Proxies yet so we can't do better at proving false. 1201 if (!(child.m_type & ~SpecRegExpObject)) { 1202 setConstant(node, jsBoolean(true)); 1203 constantWasSet = true; 1204 break; 1205 } 1206 if (!(child.m_type & SpecObject)) { 1207 setConstant(node, jsBoolean(false)); 1208 constantWasSet = true; 1209 break; 1210 } 1211 break; 1212 1194 1213 default: 1195 1214 break; -
trunk/Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp
r199397 r199511 2240 2240 set(VirtualRegister(resultOperand), regExpExec); 2241 2241 2242 return true; 2243 } 2244 2245 case IsRegExpObjectIntrinsic: { 2246 ASSERT(argumentCountIncludingThis == 2); 2247 2248 insertChecks(); 2249 Node* isRegExpObject = addToGraph(IsRegExpObject, OpInfo(prediction), get(virtualRegisterForArgument(1, registerOffset))); 2250 set(VirtualRegister(resultOperand), isRegExpObject); 2242 2251 return true; 2243 2252 } -
trunk/Source/JavaScriptCore/dfg/DFGClobberize.h
r199397 r199511 161 161 case IsString: 162 162 case IsObject: 163 case IsRegExpObject: 163 164 case LogicalNot: 164 165 case CheckInBounds: -
trunk/Source/JavaScriptCore/dfg/DFGDoesGC.cpp
r199397 r199511 163 163 case IsObjectOrNull: 164 164 case IsFunction: 165 case IsRegExpObject: 165 166 case TypeOf: 166 167 case LogicalNot: -
trunk/Source/JavaScriptCore/dfg/DFGFixupPhase.cpp
r199397 r199511 1511 1511 case IsObjectOrNull: 1512 1512 case IsFunction: 1513 case IsRegExpObject: 1513 1514 case CreateDirectArguments: 1514 1515 case CreateClonedArguments: -
trunk/Source/JavaScriptCore/dfg/DFGNodeType.h
r199397 r199511 310 310 macro(IsObjectOrNull, NodeResultBoolean) \ 311 311 macro(IsFunction, NodeResultBoolean) \ 312 macro(IsRegExpObject, NodeResultBoolean) \ 312 313 macro(TypeOf, NodeResultJS) \ 313 314 macro(LogicalNot, NodeResultBoolean) \ -
trunk/Source/JavaScriptCore/dfg/DFGPredictionPropagationPhase.cpp
r199397 r199511 432 432 case IsObject: 433 433 case IsObjectOrNull: 434 case IsFunction: { 434 case IsFunction: 435 case IsRegExpObject: { 435 436 changed |= setPrediction(SpecBoolean); 436 437 break; -
trunk/Source/JavaScriptCore/dfg/DFGSafeToExecute.h
r199397 r199511 263 263 case IsObjectOrNull: 264 264 case IsFunction: 265 case IsRegExpObject: 265 266 case TypeOf: 266 267 case LogicalNot: -
trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp
r199397 r199511 3424 3424 callOperation(operationIsArrayConstructor, resultGPR, valueRegs); 3425 3425 unblessedBooleanResult(resultGPR, node); 3426 } 3427 3428 void SpeculativeJIT::compileIsRegExpObject(Node* node) 3429 { 3430 JSValueOperand value(this, node->child1()); 3431 GPRFlushedCallResult result(this); 3432 3433 JSValueRegs valueRegs = value.jsValueRegs(); 3434 GPRReg resultGPR = result.gpr(); 3435 3436 JITCompiler::Jump isNotCell = m_jit.branchIfNotCell(valueRegs); 3437 3438 m_jit.compare8(JITCompiler::Equal, 3439 JITCompiler::Address(valueRegs.payloadGPR(), JSCell::typeInfoTypeOffset()), 3440 TrustedImm32(RegExpObjectType), 3441 resultGPR); 3442 blessBoolean(resultGPR); 3443 JITCompiler::Jump done = m_jit.jump(); 3444 3445 isNotCell.link(&m_jit); 3446 moveFalseTo(resultGPR); 3447 3448 done.link(&m_jit); 3449 blessedBooleanResult(resultGPR, node); 3426 3450 } 3427 3451 -
trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h
r199397 r199511 738 738 void compileIsArrayConstructor(Node*); 739 739 void compileIsArrayObject(Node*); 740 void compileIsRegExpObject(Node*); 740 741 741 742 void emitCall(Node*); -
trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp
r199397 r199511 4530 4530 break; 4531 4531 } 4532 4533 case IsRegExpObject: { 4534 compileIsRegExpObject(node); 4535 break; 4536 } 4537 4532 4538 case TypeOf: { 4533 4539 compileTypeOf(node); -
trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp
r199397 r199511 4543 4543 } 4544 4544 4545 case IsRegExpObject: { 4546 compileIsRegExpObject(node); 4547 break; 4548 } 4549 4545 4550 case TypeOf: { 4546 4551 compileTypeOf(node); -
trunk/Source/JavaScriptCore/ftl/FTLCapabilities.cpp
r199397 r199511 187 187 case IsObjectOrNull: 188 188 case IsFunction: 189 case IsRegExpObject: 189 190 case CheckTypeInfoFlags: 190 191 case OverridesHasInstance: -
trunk/Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp
r199397 r199511 870 870 case IsFunction: 871 871 compileIsFunction(); 872 break; 873 case IsRegExpObject: 874 compileIsRegExpObject(); 872 875 break; 873 876 case TypeOf: … … 5903 5906 setBoolean(result); 5904 5907 } 5905 5908 5909 void compileIsRegExpObject() 5910 { 5911 LValue value = lowJSValue(m_node->child1()); 5912 5913 LBasicBlock isCellCase = m_out.newBlock(); 5914 LBasicBlock continuation = m_out.newBlock(); 5915 5916 ValueFromBlock notCellResult = m_out.anchor(m_out.booleanFalse); 5917 m_out.branch( 5918 isCell(value, provenType(m_node->child1())), unsure(isCellCase), unsure(continuation)); 5919 5920 LBasicBlock lastNext = m_out.appendTo(isCellCase, continuation); 5921 ValueFromBlock cellResult = m_out.anchor(isRegExpObject(value, provenType(m_node->child1()))); 5922 m_out.jump(continuation); 5923 5924 m_out.appendTo(continuation, lastNext); 5925 setBoolean(m_out.phi(m_out.boolean, notCellResult, cellResult)); 5926 } 5927 5906 5928 void compileTypeOf() 5907 5929 { … … 9951 9973 m_out.constInt32(MasqueradesAsUndefined | TypeOfShouldCallGetCallData)); 9952 9974 } 9953 9975 9976 LValue isRegExpObject(LValue cell, SpeculatedType type = SpecFullTop) 9977 { 9978 if (LValue proven = isProvenValue(type & SpecCell, SpecRegExpObject)) 9979 return proven; 9980 return m_out.equal( 9981 m_out.load8ZeroExt32(cell, m_heaps.JSCell_typeInfoType), 9982 m_out.constInt32(RegExpObjectType)); 9983 } 9984 9954 9985 LValue isType(LValue cell, JSType type) 9955 9986 { -
trunk/Source/JavaScriptCore/runtime/CommonIdentifiers.h
r199502 r199511 415 415 macro(isArrayConstructor) \ 416 416 macro(isConstructor) \ 417 macro(isRegExp ) \417 macro(isRegExpObject) \ 418 418 macro(concatMemcpy) \ 419 419 macro(appendMemcpy) \ … … 434 434 macro(regExpProtoStickyGetter) \ 435 435 macro(regExpProtoUnicodeGetter) \ 436 macro(regExpSearchFast) \ 436 437 macro(regExpSplitFast) \ 437 438 macro(stringIncludesInternal) \ -
trunk/Source/JavaScriptCore/runtime/ECMAScriptSpecInternalFunctions.cpp
r199502 r199511 30 30 #include "ConstructData.h" 31 31 #include "JSCJSValueInlines.h" 32 #include "ProxyObject.h"33 32 #include "RegExpObject.h" 34 33 … … 37 36 EncodedJSValue JSC_HOST_CALL esSpecIsConstructor(ExecState* exec) 38 37 { 39 bool isConstructor = exec-> argument(0).isConstructor();38 bool isConstructor = exec->uncheckedArgument(0).isConstructor(); 40 39 return JSValue::encode(jsBoolean(isConstructor)); 41 40 } 42 41 43 EncodedJSValue JSC_HOST_CALL esSpecIsRegExp (ExecState* exec)42 EncodedJSValue JSC_HOST_CALL esSpecIsRegExpObject(ExecState* exec) 44 43 { 45 bool isRegExp = exec->argument(0).inherits(RegExpObject::info()); 46 return JSValue::encode(jsBoolean(isRegExp)); 44 JSValue value = exec->uncheckedArgument(0); 45 if (value.isObject()) 46 return JSValue::encode(jsBoolean(value.getObject()->type() == RegExpObjectType)); 47 return JSValue::encode(jsBoolean(false)); 47 48 } 48 49 -
trunk/Source/JavaScriptCore/runtime/ECMAScriptSpecInternalFunctions.h
r199502 r199511 32 32 33 33 EncodedJSValue JSC_HOST_CALL esSpecIsConstructor(ExecState*); 34 EncodedJSValue JSC_HOST_CALL esSpecIsRegExp (ExecState*);34 EncodedJSValue JSC_HOST_CALL esSpecIsRegExpObject(ExecState*); 35 35 36 36 } // namespace JSC -
trunk/Source/JavaScriptCore/runtime/Intrinsic.h
r199397 r199511 61 61 IsArrayConstructorIntrinsic, 62 62 IsJSArrayIntrinsic, 63 IsRegExpObjectIntrinsic, 63 64 64 65 // Getter intrinsics. -
trunk/Source/JavaScriptCore/runtime/JSGlobalObject.cpp
r199502 r199511 633 633 634 634 GlobalPropertyInfo(vm.propertyNames->isConstructorPrivateName, JSFunction::create(vm, this, 1, String(), esSpecIsConstructor, NoIntrinsic), DontEnum | DontDelete | ReadOnly), 635 GlobalPropertyInfo(vm.propertyNames->isRegExp PrivateName, JSFunction::create(vm, this, 1, String(), esSpecIsRegExp, NoIntrinsic), DontEnum | DontDelete | ReadOnly),635 GlobalPropertyInfo(vm.propertyNames->isRegExpObjectPrivateName, JSFunction::create(vm, this, 1, String(), esSpecIsRegExpObject, IsRegExpObjectIntrinsic), DontEnum | DontDelete | ReadOnly), 636 636 GlobalPropertyInfo(vm.propertyNames->builtinNames().speciesConstructorPrivateName(), JSFunction::createBuiltinFunction(vm, globalObjectSpeciesConstructorCodeGenerator(vm), this), DontEnum | DontDelete | ReadOnly), 637 637 … … 649 649 GlobalPropertyInfo(vm.propertyNames->builtinNames().advanceStringIndexPrivateName(), JSFunction::createBuiltinFunction(vm, regExpPrototypeAdvanceStringIndexCodeGenerator(vm), this), DontEnum | DontDelete | ReadOnly), 650 650 GlobalPropertyInfo(vm.propertyNames->builtinNames().regExpExecPrivateName(), JSFunction::createBuiltinFunction(vm, regExpPrototypeRegExpExecCodeGenerator(vm), this), DontEnum | DontDelete | ReadOnly), 651 GlobalPropertyInfo(vm.propertyNames->regExpSearchFastPrivateName, JSFunction::create(vm, this, 2, String(), regExpProtoFuncSearchFast), DontEnum | DontDelete | ReadOnly), 651 652 GlobalPropertyInfo(vm.propertyNames->regExpSplitFastPrivateName, JSFunction::create(vm, this, 2, String(), regExpProtoFuncSplitFast), DontEnum | DontDelete | ReadOnly), 652 653 -
trunk/Source/JavaScriptCore/runtime/RegExpPrototype.cpp
r199502 r199511 50 50 static EncodedJSValue JSC_HOST_CALL regExpProtoFuncCompile(ExecState*); 51 51 static EncodedJSValue JSC_HOST_CALL regExpProtoFuncToString(ExecState*); 52 static EncodedJSValue JSC_HOST_CALL regExpProtoFuncSearch(ExecState*);53 52 static EncodedJSValue JSC_HOST_CALL regExpProtoGetterGlobal(ExecState*); 54 53 static EncodedJSValue JSC_HOST_CALL regExpProtoGetterIgnoreCase(ExecState*); … … 82 81 JSC_NATIVE_FUNCTION_WITHOUT_TRANSITION(vm.propertyNames->builtinNames().matchPrivateName(), regExpProtoFuncMatchPrivate, DontEnum | DontDelete | ReadOnly, 1); 83 82 JSC_BUILTIN_FUNCTION_WITHOUT_TRANSITION(vm.propertyNames->matchSymbol, regExpPrototypeMatchCodeGenerator, DontEnum); 84 JSC_ NATIVE_FUNCTION_WITHOUT_TRANSITION(vm.propertyNames->searchSymbol, regExpProtoFuncSearch, DontEnum, 1);83 JSC_BUILTIN_FUNCTION_WITHOUT_TRANSITION(vm.propertyNames->searchSymbol, regExpPrototypeSearchCodeGenerator, DontEnum); 85 84 JSC_BUILTIN_FUNCTION_WITHOUT_TRANSITION(vm.propertyNames->splitSymbol, regExpPrototypeSplitCodeGenerator, DontEnum); 86 85 … … 420 419 } 421 420 422 EncodedJSValue JSC_HOST_CALL regExpProtoFuncSearch(ExecState* exec) 423 { 424 JSValue thisValue = exec->thisValue(); 425 if (!thisValue.inherits(RegExpObject::info())) 426 return throwVMTypeError(exec); 421 EncodedJSValue JSC_HOST_CALL regExpProtoFuncSearchFast(ExecState* exec) 422 { 423 VM& vm = exec->vm(); 424 JSValue thisValue = exec->thisValue(); 427 425 RegExp* regExp = asRegExpObject(thisValue)->regExp(); 428 426 429 JSString* string = exec-> argument(0).toString(exec);427 JSString* string = exec->uncheckedArgument(0).toString(exec); 430 428 String s = string->value(exec); 431 if ( exec->hadException())429 if (vm.exception()) 432 430 return JSValue::encode(jsUndefined()); 433 431 434 432 RegExpConstructor* regExpConstructor = exec->lexicalGlobalObject()->regExpConstructor(); 435 MatchResult result = regExpConstructor->performMatch( exec->vm(), regExp, string, s, 0);433 MatchResult result = regExpConstructor->performMatch(vm, regExp, string, s, 0); 436 434 return JSValue::encode(result ? jsNumber(result.start) : jsNumber(-1)); 437 435 } -
trunk/Source/JavaScriptCore/runtime/RegExpPrototype.h
r199502 r199511 59 59 }; 60 60 61 EncodedJSValue JSC_HOST_CALL regExpProtoFuncSearchFast(ExecState*); 61 62 EncodedJSValue JSC_HOST_CALL regExpProtoFuncSplitFast(ExecState*); 62 63 -
trunk/Source/JavaScriptCore/tests/es6.yaml
r199502 r199511 1006 1006 cmd: runES6 :fail 1007 1007 - path: es6/Proxy_internal_get_calls_RegExp.prototype[Symbol.search].js 1008 cmd: runES6 : fail1008 cmd: runES6 :normal 1009 1009 - path: es6/Proxy_internal_get_calls_RegExp.prototype[Symbol.split].js 1010 1010 cmd: runES6 :normal -
trunk/Source/JavaScriptCore/tests/stress/regexp-search.js
r196498 r199511 60 60 shouldThrow(function () { 61 61 RegExp.prototype[Symbol.search].call(primitive) 62 }, 'TypeError: Type error');62 }, 'TypeError: RegExp.prototype.@@search requires that |this| be an Object'); 63 63 } 64 64
Note: See TracChangeset
for help on using the changeset viewer.