Changeset 199748 in webkit
- Timestamp:
- Apr 19, 2016 5:02:07 PM (8 years ago)
- Location:
- trunk
- Files:
-
- 18 added
- 27 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r199744 r199748 1 2016-04-19 Mark Lam <mark.lam@apple.com> 2 3 Re-landing: 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-19 Alex Christensen <achristensen@webkit.org> 2 31 -
trunk/Source/JavaScriptCore/ChangeLog
r199745 r199748 1 2016-04-19 Mark Lam <mark.lam@apple.com> 2 3 Re-landing: 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-19 Mark Lam <mark.lam@apple.com> 2 85 -
trunk/Source/JavaScriptCore/builtins/RegExpPrototype.js
r199731 r199748 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
r199731 r199748 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
r199724 r199748 989 989 case IsObject: 990 990 case IsObjectOrNull: 991 case IsFunction: { 991 case IsFunction: 992 case IsRegExpObject: { 992 993 AbstractValue child = forNode(node->child1()); 993 994 if (child.value()) { … … 1064 1065 setConstant(node, jsBoolean(false)); 1065 1066 break; 1067 case IsRegExpObject: 1068 setConstant(node, jsBoolean(child.value().isObject() && child.value().getObject()->type() == RegExpObjectType)); 1069 break; 1066 1070 default: 1067 1071 constantWasSet = false; … … 1206 1210 } 1207 1211 break; 1212 1213 case IsRegExpObject: 1214 // We don't have a SpeculatedType for Proxies yet so we can't do better at proving false. 1215 if (!(child.m_type & ~SpecRegExpObject)) { 1216 setConstant(node, jsBoolean(true)); 1217 constantWasSet = true; 1218 break; 1219 } 1220 if (!(child.m_type & SpecObject)) { 1221 setConstant(node, jsBoolean(false)); 1222 constantWasSet = true; 1223 break; 1224 } 1225 break; 1226 1208 1227 default: 1209 1228 break; -
trunk/Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp
r199724 r199748 2242 2242 set(VirtualRegister(resultOperand), regExpExec); 2243 2243 2244 return true; 2245 } 2246 2247 case IsRegExpObjectIntrinsic: { 2248 ASSERT(argumentCountIncludingThis == 2); 2249 2250 insertChecks(); 2251 Node* isRegExpObject = addToGraph(IsRegExpObject, OpInfo(prediction), get(virtualRegisterForArgument(1, registerOffset))); 2252 set(VirtualRegister(resultOperand), isRegExpObject); 2244 2253 return true; 2245 2254 } -
trunk/Source/JavaScriptCore/dfg/DFGClobberize.h
r199724 r199748 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
r199724 r199748 164 164 case IsObjectOrNull: 165 165 case IsFunction: 166 case IsRegExpObject: 166 167 case TypeOf: 167 168 case LogicalNot: -
trunk/Source/JavaScriptCore/dfg/DFGFixupPhase.cpp
r199724 r199748 1531 1531 case IsObjectOrNull: 1532 1532 case IsFunction: 1533 case IsRegExpObject: 1533 1534 case CreateDirectArguments: 1534 1535 case CreateClonedArguments: -
trunk/Source/JavaScriptCore/dfg/DFGNodeType.h
r199724 r199748 314 314 macro(IsObjectOrNull, NodeResultBoolean) \ 315 315 macro(IsFunction, NodeResultBoolean) \ 316 macro(IsRegExpObject, NodeResultBoolean) \ 316 317 macro(TypeOf, NodeResultJS) \ 317 318 macro(LogicalNot, NodeResultBoolean) \ -
trunk/Source/JavaScriptCore/dfg/DFGPredictionPropagationPhase.cpp
r199724 r199748 438 438 case IsObject: 439 439 case IsObjectOrNull: 440 case IsFunction: { 440 case IsFunction: 441 case IsRegExpObject: { 441 442 changed |= setPrediction(SpecBoolean); 442 443 break; -
trunk/Source/JavaScriptCore/dfg/DFGSafeToExecute.h
r199724 r199748 264 264 case IsObjectOrNull: 265 265 case IsFunction: 266 case IsRegExpObject: 266 267 case TypeOf: 267 268 case LogicalNot: -
trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp
r199699 r199748 3441 3441 callOperation(operationIsArrayConstructor, resultGPR, valueRegs); 3442 3442 unblessedBooleanResult(resultGPR, node); 3443 } 3444 3445 void SpeculativeJIT::compileIsRegExpObject(Node* node) 3446 { 3447 JSValueOperand value(this, node->child1()); 3448 GPRFlushedCallResult result(this); 3449 3450 JSValueRegs valueRegs = value.jsValueRegs(); 3451 GPRReg resultGPR = result.gpr(); 3452 3453 JITCompiler::Jump isNotCell = m_jit.branchIfNotCell(valueRegs); 3454 3455 m_jit.compare8(JITCompiler::Equal, 3456 JITCompiler::Address(valueRegs.payloadGPR(), JSCell::typeInfoTypeOffset()), 3457 TrustedImm32(RegExpObjectType), 3458 resultGPR); 3459 blessBoolean(resultGPR); 3460 JITCompiler::Jump done = m_jit.jump(); 3461 3462 isNotCell.link(&m_jit); 3463 moveFalseTo(resultGPR); 3464 3465 done.link(&m_jit); 3466 blessedBooleanResult(resultGPR, node); 3443 3467 } 3444 3468 -
trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h
r199699 r199748 739 739 void compileIsArrayConstructor(Node*); 740 740 void compileIsArrayObject(Node*); 741 void compileIsRegExpObject(Node*); 741 742 742 743 void emitCall(Node*); -
trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp
r199724 r199748 4536 4536 break; 4537 4537 } 4538 4539 case IsRegExpObject: { 4540 compileIsRegExpObject(node); 4541 break; 4542 } 4543 4538 4544 case TypeOf: { 4539 4545 compileTypeOf(node); -
trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp
r199724 r199748 4564 4564 } 4565 4565 4566 case IsRegExpObject: { 4567 compileIsRegExpObject(node); 4568 break; 4569 } 4570 4566 4571 case TypeOf: { 4567 4572 compileTypeOf(node); -
trunk/Source/JavaScriptCore/ftl/FTLCapabilities.cpp
r199724 r199748 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
r199724 r199748 870 870 case IsFunction: 871 871 compileIsFunction(); 872 break; 873 case IsRegExpObject: 874 compileIsRegExpObject(); 872 875 break; 873 876 case TypeOf: … … 5926 5929 setBoolean(result); 5927 5930 } 5928 5931 5932 void compileIsRegExpObject() 5933 { 5934 LValue value = lowJSValue(m_node->child1()); 5935 5936 LBasicBlock isCellCase = m_out.newBlock(); 5937 LBasicBlock continuation = m_out.newBlock(); 5938 5939 ValueFromBlock notCellResult = m_out.anchor(m_out.booleanFalse); 5940 m_out.branch( 5941 isCell(value, provenType(m_node->child1())), unsure(isCellCase), unsure(continuation)); 5942 5943 LBasicBlock lastNext = m_out.appendTo(isCellCase, continuation); 5944 ValueFromBlock cellResult = m_out.anchor(isRegExpObject(value, provenType(m_node->child1()))); 5945 m_out.jump(continuation); 5946 5947 m_out.appendTo(continuation, lastNext); 5948 setBoolean(m_out.phi(m_out.boolean, notCellResult, cellResult)); 5949 } 5950 5929 5951 void compileTypeOf() 5930 5952 { … … 9999 10021 m_out.constInt32(MasqueradesAsUndefined | TypeOfShouldCallGetCallData)); 10000 10022 } 10001 10023 10024 LValue isRegExpObject(LValue cell, SpeculatedType type = SpecFullTop) 10025 { 10026 if (LValue proven = isProvenValue(type & SpecCell, SpecRegExpObject)) 10027 return proven; 10028 return m_out.equal( 10029 m_out.load8ZeroExt32(cell, m_heaps.JSCell_typeInfoType), 10030 m_out.constInt32(RegExpObjectType)); 10031 } 10032 10002 10033 LValue isType(LValue cell, JSType type) 10003 10034 { -
trunk/Source/JavaScriptCore/runtime/CommonIdentifiers.h
r199731 r199748 416 416 macro(isArrayConstructor) \ 417 417 macro(isConstructor) \ 418 macro(isRegExp ) \418 macro(isRegExpObject) \ 419 419 macro(concatMemcpy) \ 420 420 macro(appendMemcpy) \ … … 435 435 macro(regExpProtoStickyGetter) \ 436 436 macro(regExpProtoUnicodeGetter) \ 437 macro(regExpSearchFast) \ 437 438 macro(regExpSplitFast) \ 438 439 macro(stringIncludesInternal) \ -
trunk/Source/JavaScriptCore/runtime/ECMAScriptSpecInternalFunctions.cpp
r199731 r199748 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
r199731 r199748 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
r199514 r199748 61 61 IsArrayConstructorIntrinsic, 62 62 IsJSArrayIntrinsic, 63 IsRegExpObjectIntrinsic, 63 64 64 65 // Getter intrinsics. -
trunk/Source/JavaScriptCore/runtime/JSGlobalObject.cpp
r199731 r199748 635 635 636 636 GlobalPropertyInfo(vm.propertyNames->isConstructorPrivateName, JSFunction::create(vm, this, 1, String(), esSpecIsConstructor, NoIntrinsic), DontEnum | DontDelete | ReadOnly), 637 GlobalPropertyInfo(vm.propertyNames->isRegExp PrivateName, JSFunction::create(vm, this, 1, String(), esSpecIsRegExp, NoIntrinsic), DontEnum | DontDelete | ReadOnly),637 GlobalPropertyInfo(vm.propertyNames->isRegExpObjectPrivateName, JSFunction::create(vm, this, 1, String(), esSpecIsRegExpObject, IsRegExpObjectIntrinsic), DontEnum | DontDelete | ReadOnly), 638 638 GlobalPropertyInfo(vm.propertyNames->builtinNames().speciesConstructorPrivateName(), JSFunction::createBuiltinFunction(vm, globalObjectSpeciesConstructorCodeGenerator(vm), this), DontEnum | DontDelete | ReadOnly), 639 639 … … 651 651 GlobalPropertyInfo(vm.propertyNames->builtinNames().advanceStringIndexPrivateName(), JSFunction::createBuiltinFunction(vm, regExpPrototypeAdvanceStringIndexCodeGenerator(vm), this), DontEnum | DontDelete | ReadOnly), 652 652 GlobalPropertyInfo(vm.propertyNames->builtinNames().regExpExecPrivateName(), JSFunction::createBuiltinFunction(vm, regExpPrototypeRegExpExecCodeGenerator(vm), this), DontEnum | DontDelete | ReadOnly), 653 GlobalPropertyInfo(vm.propertyNames->regExpSearchFastPrivateName, JSFunction::create(vm, this, 2, String(), regExpProtoFuncSearchFast), DontEnum | DontDelete | ReadOnly), 653 654 GlobalPropertyInfo(vm.propertyNames->regExpSplitFastPrivateName, JSFunction::create(vm, this, 2, String(), regExpProtoFuncSplitFast), DontEnum | DontDelete | ReadOnly), 654 655 -
trunk/Source/JavaScriptCore/runtime/RegExpPrototype.cpp
r199731 r199748 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 … … 438 437 } 439 438 440 EncodedJSValue JSC_HOST_CALL regExpProtoFuncSearch(ExecState* exec) 441 { 442 JSValue thisValue = exec->thisValue(); 443 if (!thisValue.inherits(RegExpObject::info())) 444 return throwVMTypeError(exec); 439 EncodedJSValue JSC_HOST_CALL regExpProtoFuncSearchFast(ExecState* exec) 440 { 441 VM& vm = exec->vm(); 442 JSValue thisValue = exec->thisValue(); 445 443 RegExp* regExp = asRegExpObject(thisValue)->regExp(); 446 444 447 JSString* string = exec-> argument(0).toString(exec);445 JSString* string = exec->uncheckedArgument(0).toString(exec); 448 446 String s = string->value(exec); 449 if ( exec->hadException())447 if (vm.exception()) 450 448 return JSValue::encode(jsUndefined()); 451 449 452 450 RegExpConstructor* regExpConstructor = exec->lexicalGlobalObject()->regExpConstructor(); 453 MatchResult result = regExpConstructor->performMatch( exec->vm(), regExp, string, s, 0);451 MatchResult result = regExpConstructor->performMatch(vm, regExp, string, s, 0); 454 452 return JSValue::encode(result ? jsNumber(result.start) : jsNumber(-1)); 455 453 } -
trunk/Source/JavaScriptCore/runtime/RegExpPrototype.h
r199731 r199748 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
r199731 r199748 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
r199514 r199748 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.