Changeset 181084 in webkit
- Timestamp:
- Mar 5, 2015 10:27:27 AM (9 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 8 added
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/CMakeLists.txt
r181077 r181084 496 496 runtime/JSSetIterator.cpp 497 497 runtime/JSString.cpp 498 runtime/JSStringIterator.cpp 498 499 runtime/JSStringJoiner.cpp 499 500 runtime/JSSymbolTableObject.cpp … … 547 548 runtime/StrictEvalActivation.cpp 548 549 runtime/StringConstructor.cpp 550 runtime/StringIteratorConstructor.cpp 551 runtime/StringIteratorPrototype.cpp 549 552 runtime/StringObject.cpp 550 553 runtime/StringPrototype.cpp … … 599 602 runtime/RegExpPrototype.cpp 600 603 runtime/StringConstructor.cpp 604 runtime/StringIteratorPrototype.cpp 601 605 runtime/SymbolPrototype.cpp 602 606 ) -
trunk/Source/JavaScriptCore/ChangeLog
r181083 r181084 1 2015-03-05 Yusuke Suzuki <utatane.tea@gmail.com> 2 3 Implement ES6 StringIterator 4 https://bugs.webkit.org/show_bug.cgi?id=142080 5 6 Reviewed by Filip Pizlo. 7 8 This patch introduces ES6 String Iterator. 9 It enumerates code points instead of elements in String. 10 So surrogate pairs should be handled correctly. 11 12 * CMakeLists.txt: 13 * DerivedSources.make: 14 * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj: 15 * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters: 16 * JavaScriptCore.xcodeproj/project.pbxproj: 17 * builtins/StringIterator.prototype.js: Added. 18 (next): 19 * runtime/CommonIdentifiers.h: 20 * runtime/JSGlobalObject.cpp: 21 * runtime/JSGlobalObject.h: 22 * runtime/JSStringIterator.cpp: Added. 23 (JSC::JSStringIterator::finishCreation): 24 * runtime/JSStringIterator.h: Added. 25 (JSC::JSStringIterator::createStructure): 26 (JSC::JSStringIterator::create): 27 (JSC::JSStringIterator::JSStringIterator): 28 * runtime/StringIteratorConstructor.cpp: Added. 29 (JSC::StringIteratorConstructor::finishCreation): 30 * runtime/StringIteratorConstructor.h: Added. 31 (JSC::StringIteratorConstructor::create): 32 (JSC::StringIteratorConstructor::createStructure): 33 (JSC::StringIteratorConstructor::StringIteratorConstructor): 34 * runtime/StringIteratorPrototype.cpp: Added. 35 (JSC::StringIteratorPrototype::finishCreation): 36 (JSC::StringIteratorPrototype::getOwnPropertySlot): 37 (JSC::stringIteratorPrototypeIterator): 38 * runtime/StringIteratorPrototype.h: Added. 39 (JSC::StringIteratorPrototype::create): 40 (JSC::StringIteratorPrototype::createStructure): 41 (JSC::StringIteratorPrototype::StringIteratorPrototype): 42 * runtime/StringPrototype.cpp: 43 (JSC::StringPrototype::finishCreation): 44 (JSC::stringProtoFuncIterator): 45 * tests/stress/string-iterators.js: Added. 46 (testSurrogatePair): 47 (increment): 48 (for): 49 1 50 2015-03-05 Csaba Osztrogonác <ossy@webkit.org> 2 51 -
trunk/Source/JavaScriptCore/DerivedSources.make
r181077 r181084 58 58 RegExpObject.lut.h \ 59 59 StringConstructor.lut.h \ 60 StringIteratorPrototype.lut.h \ 60 61 SymbolPrototype.lut.h \ 61 62 udis86_itab.h \ -
trunk/Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj
r181077 r181084 762 762 <ClCompile Include="..\runtime\JSSetIterator.cpp" /> 763 763 <ClCompile Include="..\runtime\JSString.cpp" /> 764 <ClCompile Include="..\runtime\JSStringIterator.cpp" /> 764 765 <ClCompile Include="..\runtime\JSStringJoiner.cpp" /> 765 766 <ClCompile Include="..\runtime\JSSymbolTableObject.cpp" /> … … 815 816 <ClCompile Include="..\runtime\StringConstructor.cpp" /> 816 817 <ClCompile Include="..\runtime\StringObject.cpp" /> 818 <ClCompile Include="..\runtime\StringIteratorConstructor.cpp" /> 819 <ClCompile Include="..\runtime\StringIteratorPrototype.cpp" /> 817 820 <ClCompile Include="..\runtime\StringPrototype.cpp" /> 818 821 <ClCompile Include="..\runtime\StringRecursionChecker.cpp" /> … … 1555 1558 <ClInclude Include="..\runtime\JSString.h" /> 1556 1559 <ClInclude Include="..\runtime\JSStringBuilder.h" /> 1560 <ClInclude Include="..\runtime\JSStringIterator.h" /> 1557 1561 <ClInclude Include="..\runtime\JSStringJoiner.h" /> 1558 1562 <ClInclude Include="..\runtime\JSSymbolTableObject.h" /> … … 1627 1631 <ClInclude Include="..\runtime\StrictEvalActivation.h" /> 1628 1632 <ClInclude Include="..\runtime\StringConstructor.h" /> 1633 <ClInclude Include="..\runtime\StringIteratorConstructor.h" /> 1634 <ClInclude Include="..\runtime\StringIteratorPrototype.h" /> 1629 1635 <ClInclude Include="..\runtime\StringObject.h" /> 1630 1636 <ClInclude Include="..\runtime\StringPrototype.h" /> -
trunk/Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters
r181077 r181084 706 706 <Filter>runtime</Filter> 707 707 </ClCompile> 708 <ClCompile Include="..\runtime\JSStringIterator.cpp"> 709 <Filter>runtime</Filter> 710 </ClCompile> 708 711 <ClCompile Include="..\runtime\JSStringJoiner.cpp"> 709 712 <Filter>runtime</Filter> … … 836 839 </ClCompile> 837 840 <ClCompile Include="..\runtime\StringConstructor.cpp"> 841 <Filter>runtime</Filter> 842 </ClCompile> 843 <ClCompile Include="..\runtime\StringIteratorConstructor.cpp"> 844 <Filter>runtime</Filter> 845 </ClCompile> 846 <ClCompile Include="..\runtime\StringIteratorPrototype.cpp"> 838 847 <Filter>runtime</Filter> 839 848 </ClCompile> … … 2740 2749 <Filter>runtime</Filter> 2741 2750 </ClInclude> 2751 <ClInclude Include="..\runtime\JSStringIterator.h"> 2752 <Filter>runtime</Filter> 2753 </ClInclude> 2742 2754 <ClInclude Include="..\runtime\JSStringJoiner.h"> 2743 2755 <Filter>runtime</Filter> … … 2885 2897 </ClInclude> 2886 2898 <ClInclude Include="..\runtime\StringConstructor.h"> 2899 <Filter>runtime</Filter> 2900 </ClInclude> 2901 <ClInclude Include="..\runtime\StringIteratorConstructor.h"> 2902 <Filter>runtime</Filter> 2903 </ClInclude> 2904 <ClInclude Include="..\runtime\StringIteratorPrototype.h"> 2887 2905 <Filter>runtime</Filter> 2888 2906 </ClInclude> -
trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
r181077 r181084 956 956 705B41B21A6E501E00716757 /* SymbolPrototype.h in Headers */ = {isa = PBXBuildFile; fileRef = 705B41AA1A6E501E00716757 /* SymbolPrototype.h */; settings = {ATTRIBUTES = (Private, ); }; }; 957 957 70B0A9D11A9B66460001306A /* RuntimeFlags.h in Headers */ = {isa = PBXBuildFile; fileRef = 70B0A9D01A9B66200001306A /* RuntimeFlags.h */; settings = {ATTRIBUTES = (Private, ); }; }; 958 70EC0EC21AA0D7DA00B6AAFA /* JSStringIterator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 70EC0EBC1AA0D7DA00B6AAFA /* JSStringIterator.cpp */; }; 959 70EC0EC31AA0D7DA00B6AAFA /* JSStringIterator.h in Headers */ = {isa = PBXBuildFile; fileRef = 70EC0EBD1AA0D7DA00B6AAFA /* JSStringIterator.h */; settings = {ATTRIBUTES = (Private, ); }; }; 960 70EC0EC41AA0D7DA00B6AAFA /* StringIteratorConstructor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 70EC0EBE1AA0D7DA00B6AAFA /* StringIteratorConstructor.cpp */; }; 961 70EC0EC51AA0D7DA00B6AAFA /* StringIteratorConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = 70EC0EBF1AA0D7DA00B6AAFA /* StringIteratorConstructor.h */; settings = {ATTRIBUTES = (Private, ); }; }; 962 70EC0EC61AA0D7DA00B6AAFA /* StringIteratorPrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 70EC0EC01AA0D7DA00B6AAFA /* StringIteratorPrototype.cpp */; }; 963 70EC0EC71AA0D7DA00B6AAFA /* StringIteratorPrototype.h in Headers */ = {isa = PBXBuildFile; fileRef = 70EC0EC11AA0D7DA00B6AAFA /* StringIteratorPrototype.h */; settings = {ATTRIBUTES = (Private, ); }; }; 958 964 7C008CD2186F8A9300955C24 /* JSPromiseFunctions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C008CD0186F8A9300955C24 /* JSPromiseFunctions.cpp */; }; 959 965 7C008CD3186F8A9300955C24 /* JSPromiseFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C008CD1186F8A9300955C24 /* JSPromiseFunctions.h */; settings = {ATTRIBUTES = (Private, ); }; }; … … 2641 2647 705B41AA1A6E501E00716757 /* SymbolPrototype.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SymbolPrototype.h; sourceTree = "<group>"; }; 2642 2648 70B0A9D01A9B66200001306A /* RuntimeFlags.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RuntimeFlags.h; sourceTree = "<group>"; }; 2649 70EC0EBC1AA0D7DA00B6AAFA /* JSStringIterator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSStringIterator.cpp; sourceTree = "<group>"; }; 2650 70EC0EBD1AA0D7DA00B6AAFA /* JSStringIterator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSStringIterator.h; sourceTree = "<group>"; }; 2651 70EC0EBE1AA0D7DA00B6AAFA /* StringIteratorConstructor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = StringIteratorConstructor.cpp; sourceTree = "<group>"; }; 2652 70EC0EBF1AA0D7DA00B6AAFA /* StringIteratorConstructor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StringIteratorConstructor.h; sourceTree = "<group>"; }; 2653 70EC0EC01AA0D7DA00B6AAFA /* StringIteratorPrototype.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = StringIteratorPrototype.cpp; sourceTree = "<group>"; }; 2654 70EC0EC11AA0D7DA00B6AAFA /* StringIteratorPrototype.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StringIteratorPrototype.h; sourceTree = "<group>"; }; 2643 2655 7C008CD0186F8A9300955C24 /* JSPromiseFunctions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; path = JSPromiseFunctions.cpp; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; 2644 2656 7C008CD1186F8A9300955C24 /* JSPromiseFunctions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSPromiseFunctions.h; sourceTree = "<group>"; }; … … 4450 4462 F692A8620255597D01FF60F7 /* JSString.h */, 4451 4463 86E85538111B9968001AF51E /* JSStringBuilder.h */, 4464 70EC0EBC1AA0D7DA00B6AAFA /* JSStringIterator.cpp */, 4465 70EC0EBD1AA0D7DA00B6AAFA /* JSStringIterator.h */, 4452 4466 2600B5A4152BAAA70091EE5F /* JSStringJoiner.cpp */, 4453 4467 2600B5A5152BAAA70091EE5F /* JSStringJoiner.h */, … … 4574 4588 BC18C3C00E16EE3300B34460 /* StringConstructor.cpp */, 4575 4589 BC18C3C10E16EE3300B34460 /* StringConstructor.h */, 4590 70EC0EBE1AA0D7DA00B6AAFA /* StringIteratorConstructor.cpp */, 4591 70EC0EBF1AA0D7DA00B6AAFA /* StringIteratorConstructor.h */, 4592 70EC0EC01AA0D7DA00B6AAFA /* StringIteratorPrototype.cpp */, 4593 70EC0EC11AA0D7DA00B6AAFA /* StringIteratorPrototype.h */, 4576 4594 BC18C3C20E16EE3300B34460 /* StringObject.cpp */, 4577 4595 BC18C3C30E16EE3300B34460 /* StringObject.h */, … … 5822 5840 BCBE2CAE14E985AA000593AD /* GCAssertions.h in Headers */, 5823 5841 0F766D3015A8DCE2008F363E /* GCAwareJITStubRoutine.h in Headers */, 5842 70EC0EC71AA0D7DA00B6AAFA /* StringIteratorPrototype.h in Headers */, 5824 5843 0F2B66AC17B6B53F00A7AE3F /* GCIncomingRefCounted.h in Headers */, 5825 5844 0F2B66AD17B6B54500A7AE3F /* GCIncomingRefCountedInlines.h in Headers */, … … 6243 6262 BC18C4640E16F5CD00B34460 /* SourceCode.h in Headers */, 6244 6263 BC18C4630E16F5CD00B34460 /* SourceProvider.h in Headers */, 6264 70EC0EC31AA0D7DA00B6AAFA /* JSStringIterator.h in Headers */, 6245 6265 E49DC16C12EF294E00184A1F /* SourceProviderCache.h in Headers */, 6246 6266 E49DC16D12EF295300184A1F /* SourceProviderCacheItem.h in Headers */, … … 6264 6284 C2FE18A416BAEC4000AF3061 /* StructureRareData.h in Headers */, 6265 6285 C20BA92D16BB1C1500B3AEA2 /* StructureRareDataInlines.h in Headers */, 6286 70EC0EC51AA0D7DA00B6AAFA /* StringIteratorConstructor.h in Headers */, 6266 6287 0F2B9CEB19D0BA7D00B1D1B5 /* DFGPhiChildren.h in Headers */, 6267 6288 0F9332A514CA7DDD0085F3C6 /* StructureSet.h in Headers */, … … 6952 6973 0FC09776146943B000CF2442 /* DFGOSRExitCompiler32_64.cpp in Sources */, 6953 6974 0FC0977214693AF900CF2442 /* DFGOSRExitCompiler64.cpp in Sources */, 6975 70EC0EC41AA0D7DA00B6AAFA /* StringIteratorConstructor.cpp in Sources */, 6976 70EC0EC21AA0D7DA00B6AAFA /* JSStringIterator.cpp in Sources */, 6954 6977 0F7025A91714B0FA00382C0E /* DFGOSRExitCompilerCommon.cpp in Sources */, 6955 6978 0FEFC9AA1681A3B300567F53 /* DFGOSRExitJumpPlaceholder.cpp in Sources */, … … 7315 7338 0F7700921402FF3C0078EB39 /* SamplingCounter.cpp in Sources */, 7316 7339 1429D8850ED21C3D00B89619 /* SamplingTool.cpp in Sources */, 7340 70EC0EC61AA0D7DA00B6AAFA /* StringIteratorPrototype.cpp in Sources */, 7317 7341 A5FD0067189AFE9C00633231 /* ScriptArguments.cpp in Sources */, 7318 7342 A5FD006D189B00AA00633231 /* ScriptCallFrame.cpp in Sources */, -
trunk/Source/JavaScriptCore/runtime/CommonIdentifiers.h
r181077 r181084 242 242 macro(arrayIterationKindValue) \ 243 243 macro(arrayIterationKindKeyValue) \ 244 macro(charCodeAt) \ 245 macro(iteratedString) \ 246 macro(stringIteratorNextIndex) \ 244 247 macro(resolve) \ 245 248 macro(reject) \ -
trunk/Source/JavaScriptCore/runtime/JSGlobalObject.cpp
r181077 r181084 83 83 #include "JSSet.h" 84 84 #include "JSSetIterator.h" 85 #include "JSStringIterator.h" 85 86 #include "JSTypedArrayConstructors.h" 86 87 #include "JSTypedArrayPrototypes.h" … … 116 117 #include "StrictEvalActivation.h" 117 118 #include "StringConstructor.h" 119 #include "StringIteratorConstructor.h" 120 #include "StringIteratorPrototype.h" 118 121 #include "StringPrototype.h" 119 122 #include "Symbol.h" -
trunk/Source/JavaScriptCore/runtime/JSGlobalObject.h
r181064 r181084 110 110 DEFINE_STANDARD_BUILTIN(macro, MapIterator, mapIterator) \ 111 111 DEFINE_STANDARD_BUILTIN(macro, SetIterator, setIterator) \ 112 DEFINE_STANDARD_BUILTIN(macro, StringIterator, stringIterator) \ 112 113 113 114 -
trunk/Source/JavaScriptCore/runtime/StringPrototype.cpp
r178860 r181084 35 35 #include "ObjectPrototype.h" 36 36 #include "JSCInlines.h" 37 #include "JSStringIterator.h" 37 38 #include "PropertyNameArray.h" 38 39 #include "RegExpCache.h" … … 88 89 EncodedJSValue JSC_HOST_CALL stringProtoFuncEndsWith(ExecState*); 89 90 EncodedJSValue JSC_HOST_CALL stringProtoFuncIncludes(ExecState*); 91 EncodedJSValue JSC_HOST_CALL stringProtoFuncIterator(ExecState*); 90 92 91 93 const ClassInfo StringPrototype::s_info = { "String", &StringObject::s_info, 0, CREATE_METHOD_TABLE(StringPrototype) }; … … 141 143 JSC_NATIVE_FUNCTION("endsWith", stringProtoFuncEndsWith, DontEnum, 0); 142 144 JSC_NATIVE_FUNCTION("includes", stringProtoFuncIncludes, DontEnum, 0); 145 JSC_NATIVE_FUNCTION(vm.propertyNames->iteratorPrivateName, stringProtoFuncIterator, DontEnum, 0); 146 147 JSC_NATIVE_INTRINSIC_FUNCTION(vm.propertyNames->charCodeAtPrivateName, stringProtoFuncCharCodeAt, DontEnum, 1, CharCodeAtIntrinsic); 143 148 144 149 // The constructor will be added later, after StringConstructor has been built … … 1703 1708 return JSValue::encode(jsBoolean(stringToSearchIn.contains(searchString, true, start))); 1704 1709 } 1705 1710 1711 EncodedJSValue JSC_HOST_CALL stringProtoFuncIterator(ExecState* exec) 1712 { 1713 JSValue thisValue = exec->thisValue(); 1714 if (!checkObjectCoercible(thisValue)) 1715 return throwVMTypeError(exec); 1716 JSString* string = thisValue.toString(exec); 1717 return JSValue::encode(JSStringIterator::create(exec, exec->callee()->globalObject()->stringIteratorStructure(), string)); 1718 } 1719 1706 1720 } // namespace JSC
Note: See TracChangeset
for help on using the changeset viewer.