Changeset 159031 in webkit


Ignore:
Timestamp:
Nov 10, 2013 2:28:10 PM (10 years ago)
Author:
oliver@apple.com
Message:

Implement Set iterators
https://bugs.webkit.org/show_bug.cgi?id=124129

Reviewed by Antti Koivisto.

Source/JavaScriptCore:

Add Set iterator classes and implementations

  • JavaScriptCore.xcodeproj/project.pbxproj:
  • runtime/CommonIdentifiers.h:
  • runtime/JSGlobalObject.cpp:
  • runtime/JSGlobalObject.h:
  • runtime/JSSetIterator.cpp: Added.

(JSC::JSSetIterator::finishCreation):
(JSC::JSSetIterator::visitChildren):
(JSC::JSSetIterator::createPair):

  • runtime/JSSetIterator.h: Added.

(JSC::JSSetIterator::createStructure):
(JSC::JSSetIterator::create):
(JSC::JSSetIterator::next):
(JSC::JSSetIterator::JSSetIterator):

  • runtime/SetIteratorConstructor.cpp: Added.

(JSC::SetIteratorConstructor::finishCreation):

  • runtime/SetIteratorConstructor.h: Added.

(JSC::SetIteratorConstructor::create):
(JSC::SetIteratorConstructor::createStructure):
(JSC::SetIteratorConstructor::SetIteratorConstructor):

  • runtime/SetIteratorPrototype.cpp: Added.

(JSC::SetIteratorPrototype::finishCreation):
(JSC::SetIteratorPrototypeFuncIterator):
(JSC::SetIteratorPrototypeFuncNext):

  • runtime/SetIteratorPrototype.h: Added.

(JSC::SetIteratorPrototype::create):
(JSC::SetIteratorPrototype::createStructure):
(JSC::SetIteratorPrototype::SetIteratorPrototype):

  • runtime/SetPrototype.cpp:

(JSC::SetPrototype::finishCreation):
(JSC::setProtoFuncValues):
(JSC::setProtoFuncEntries):
(JSC::setProtoFuncKeys):

LayoutTests:

Move Set tests to more sensible location and add iterator tests

  • js/basic-set-expected.txt: Renamed from LayoutTests/js/dom/basic-set-expected.txt.
  • js/basic-set.html: Renamed from LayoutTests/js/dom/basic-set.html.
  • js/script-tests/basic-set.js: Renamed from LayoutTests/js/dom/script-tests/basic-set.js.

(set new):
(otherString.string_appeared_here.set add):
(try.set forEach):
(set forEach):
(set gc):

Location:
trunk
Files:
6 added
11 edited
3 moved

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r159030 r159031  
     12013-11-10  Oliver Hunt  <oliver@apple.com>
     2
     3        Implement Set iterators
     4        https://bugs.webkit.org/show_bug.cgi?id=124129
     5
     6        Reviewed by Antti Koivisto.
     7
     8        Move Set tests to more sensible location and add iterator tests
     9
     10        * js/basic-set-expected.txt: Renamed from LayoutTests/js/dom/basic-set-expected.txt.
     11        * js/basic-set.html: Renamed from LayoutTests/js/dom/basic-set.html.
     12        * js/script-tests/basic-set.js: Renamed from LayoutTests/js/dom/script-tests/basic-set.js.
     13        (set new):
     14        (otherString.string_appeared_here.set add):
     15        (try.set forEach):
     16        (set forEach):
     17        (set gc):
     18
    1192013-11-10  Antti Koivisto  <antti@apple.com>
    220
  • trunk/LayoutTests/js/basic-set-expected.txt

    r159030 r159031  
    122122PASS set.has("6") is true
    123123PASS set.has(4) is true
     124set.@@iterator()
     125PASS key is 0
     126PASS key is '0'
     127PASS key is 1
     128PASS key is '1'
     129PASS key is 2
     130PASS key is '2'
     131PASS key is 3
     132PASS key is '3'
     133PASS key is 4
     134PASS key is '4'
     135PASS i is 10
     136set.entries()
     137PASS key is 0
     138PASS value is 0
     139PASS key is '0'
     140PASS value is '0'
     141PASS key is 1
     142PASS value is 1
     143PASS key is '1'
     144PASS value is '1'
     145PASS key is 2
     146PASS value is 2
     147PASS key is '2'
     148PASS value is '2'
     149PASS key is 3
     150PASS value is 3
     151PASS key is '3'
     152PASS value is '3'
     153PASS key is 4
     154PASS value is 4
     155PASS key is '4'
     156PASS value is '4'
     157PASS i is 10
     158set.keys()
     159PASS key is 0
     160PASS key is '0'
     161PASS key is 1
     162PASS key is '1'
     163PASS key is 2
     164PASS key is '2'
     165PASS key is 3
     166PASS key is '3'
     167PASS key is 4
     168PASS key is '4'
     169PASS i is 10
     170set.values()
     171PASS value is 0
     172PASS value is '0'
     173PASS value is 1
     174PASS value is '1'
     175PASS value is 2
     176PASS value is '2'
     177PASS value is 3
     178PASS value is '3'
     179PASS value is 4
     180PASS value is '4'
     181PASS i is 10
     182Set mutation with live iterator and GC
     183PASS key is 1
     184PASS key is 3
     185PASS key is 4
     186PASS key is 5
     187PASS key is 7
     188PASS i is 5
     189PASS set.size is 4
    124190PASS successfullyParsed is true
    125191
  • trunk/LayoutTests/js/script-tests/basic-set.js

    r159030 r159031  
    120120        shouldBeTrue("set.has("+JSON.stringify(expectedKey)+")");
    121121}
     122
     123
     124
     125set = new Set;
     126
     127var count = 5;
     128var keys = [];
     129for (var i = 0; i < count; i++) {
     130    set.add(i)
     131    set.add("" + i)
     132    keys.push("" + i)
     133    keys.push("'" + i + "'")
     134}
     135
     136var i = 0;
     137
     138debug("set.@@iterator()")
     139for (var key of set) {
     140    shouldBe("key", "" + keys[i])
     141    i++;
     142}
     143shouldBe("i", "" + count * 2)
     144
     145debug("set.entries()")
     146var i = 0;
     147for (var [key, value] of set.entries()) {
     148    shouldBe("key", "" + keys[i])
     149    shouldBe("value", "" + keys[i])
     150    i++;
     151}
     152shouldBe("i", "" + count * 2)
     153
     154debug("set.keys()")
     155var i = 0;
     156for (var key of set.keys()) {
     157    shouldBe("key", "" + keys[i])
     158    i++;
     159}
     160shouldBe("i", "" + count * 2)
     161
     162var i = 0;
     163debug("set.values()")
     164for (var value of set.values()) {
     165    shouldBe("value", "" + keys[i])
     166    i++;
     167}
     168shouldBe("i", "" + count * 2)
     169
     170debug("Set mutation with live iterator and GC")
     171set = new Set;
     172set.add(0)
     173set.add(1)
     174set.add(2)
     175set.add(3)
     176set.add(4)
     177set.add(5)
     178set.add(6)
     179set.add(7)
     180set.add(9)
     181set.add(14)
     182
     183var keys = [1,3,4,5,7]
     184var keyIterator = set.keys();
     185gc();
     186set.delete(0)
     187gc()
     188var i = 0;
     189for (var key of keyIterator) {
     190    shouldBe("key", "" + keys[i])
     191    if (key == 7)
     192        set.delete(9)
     193    set.delete(1)
     194    set.delete(key * 2)
     195    gc()
     196    i++
     197}
     198shouldBe("i", "5")
     199shouldBe("set.size", "4");
  • trunk/Source/JavaScriptCore/CMakeLists.txt

    r159008 r159031  
    355355    runtime/JSSegmentedVariableObject.cpp
    356356    runtime/JSSet.cpp
     357    runtime/JSSetIterator.cpp
    357358    runtime/JSStaticScopeObject.cpp
    358359    runtime/JSString.cpp
     
    401402    runtime/SamplingCounter.cpp
    402403    runtime/SetConstructor.cpp
     404    runtime/SetIteratorConstructor.cpp
     405    runtime/SetIteratorPrototype.cpp
    403406    runtime/SetPrototype.cpp
    404407    runtime/SimpleTypedArrayController.cpp
  • trunk/Source/JavaScriptCore/ChangeLog

    r159008 r159031  
     12013-11-10  Oliver Hunt  <oliver@apple.com>
     2
     3        Implement Set iterators
     4        https://bugs.webkit.org/show_bug.cgi?id=124129
     5
     6        Reviewed by Antti Koivisto.
     7
     8        Add Set iterator classes and implementations
     9
     10        * JavaScriptCore.xcodeproj/project.pbxproj:
     11        * runtime/CommonIdentifiers.h:
     12        * runtime/JSGlobalObject.cpp:
     13        * runtime/JSGlobalObject.h:
     14        * runtime/JSSetIterator.cpp: Added.
     15        (JSC::JSSetIterator::finishCreation):
     16        (JSC::JSSetIterator::visitChildren):
     17        (JSC::JSSetIterator::createPair):
     18        * runtime/JSSetIterator.h: Added.
     19        (JSC::JSSetIterator::createStructure):
     20        (JSC::JSSetIterator::create):
     21        (JSC::JSSetIterator::next):
     22        (JSC::JSSetIterator::JSSetIterator):
     23        * runtime/SetIteratorConstructor.cpp: Added.
     24        (JSC::SetIteratorConstructor::finishCreation):
     25        * runtime/SetIteratorConstructor.h: Added.
     26        (JSC::SetIteratorConstructor::create):
     27        (JSC::SetIteratorConstructor::createStructure):
     28        (JSC::SetIteratorConstructor::SetIteratorConstructor):
     29        * runtime/SetIteratorPrototype.cpp: Added.
     30        (JSC::SetIteratorPrototype::finishCreation):
     31        (JSC::SetIteratorPrototypeFuncIterator):
     32        (JSC::SetIteratorPrototypeFuncNext):
     33        * runtime/SetIteratorPrototype.h: Added.
     34        (JSC::SetIteratorPrototype::create):
     35        (JSC::SetIteratorPrototype::createStructure):
     36        (JSC::SetIteratorPrototype::SetIteratorPrototype):
     37        * runtime/SetPrototype.cpp:
     38        (JSC::SetPrototype::finishCreation):
     39        (JSC::setProtoFuncValues):
     40        (JSC::setProtoFuncEntries):
     41        (JSC::setProtoFuncKeys):
     42
    1432013-11-09  Oliver Hunt  <oliver@apple.com>
    244
  • trunk/Source/JavaScriptCore/GNUmakefile.list.am

    r159008 r159031  
    955955        Source/JavaScriptCore/runtime/JSSet.cpp \
    956956        Source/JavaScriptCore/runtime/JSSet.h \
     957        Source/JavaScriptCore/runtime/JSSetIterator.cpp \
     958        Source/JavaScriptCore/runtime/JSSetIterator.h \
    957959        Source/JavaScriptCore/runtime/JSTypedArrayConstructors.cpp \
    958960        Source/JavaScriptCore/runtime/JSTypedArrayConstructors.h \
     
    10691071        Source/JavaScriptCore/runtime/SetConstructor.cpp \
    10701072        Source/JavaScriptCore/runtime/SetConstructor.h\
     1073        Source/JavaScriptCore/runtime/SetIteratorConstructor.cpp \
     1074        Source/JavaScriptCore/runtime/SetIteratorConstructor.h\
     1075        Source/JavaScriptCore/runtime/SetIteratorPrototype.cpp \
     1076        Source/JavaScriptCore/runtime/SetIteratorPrototype.h \
    10711077        Source/JavaScriptCore/runtime/SetPrototype.cpp \
    10721078        Source/JavaScriptCore/runtime/SetPrototype.h \
  • trunk/Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj

    r159008 r159031  
    593593    <ClCompile Include="..\runtime\JSSegmentedVariableObject.cpp" />
    594594    <ClCompile Include="..\runtime\JSSet.cpp" />
     595    <ClCompile Include="..\runtime\JSSetIterator.cpp" />
    595596    <ClCompile Include="..\runtime\JSString.cpp" />
    596597    <ClCompile Include="..\runtime\JSStringJoiner.cpp" />
     
    637638    <ClCompile Include="..\runtime\SamplingCounter.cpp" />
    638639    <ClCompile Include="..\runtime\SetConstructor.cpp" />
     640    <ClCompile Include="..\runtime\SetIteratorConstructor.cpp" />
     641    <ClCompile Include="..\runtime\SetIteratorPrototype.cpp" />
    639642    <ClCompile Include="..\runtime\SetPrototype.cpp" />
    640643    <ClCompile Include="..\runtime\SimpleTypedArrayController.cpp" />
     
    11791182    <ClInclude Include="..\runtime\JSSegmentedVariableObject.h" />
    11801183    <ClInclude Include="..\runtime\JSSet.h" />
     1184    <ClInclude Include="..\runtime\JSSetIterator.h" />
    11811185    <ClInclude Include="..\runtime\JSString.h" />
    11821186    <ClInclude Include="..\runtime\JSStringBuilder.h" />
     
    12411245    <ClInclude Include="..\runtime\SamplingCounter.h" />
    12421246    <ClInclude Include="..\runtime\SetConstructor.h" />
     1247    <ClInclude Include="..\runtime\SetIteratorConstructor.h" />
     1248    <ClInclude Include="..\runtime\SetIteratorPrototype.h" />
    12431249    <ClInclude Include="..\runtime\SetPrototype.h" />
    12441250    <ClInclude Include="..\runtime\SimpleTypedArrayController.h" />
  • trunk/Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters

    r159008 r159031  
    595595      <Filter>runtime</Filter>
    596596    </ClCompile>
     597    <ClCompile Include="..\runtime\JSSetIterator.cpp">
     598      <Filter>runtime</Filter>
     599    </ClCompile>
    597600    <ClCompile Include="..\runtime\JSSegmentedVariableObject.cpp">
    598601      <Filter>runtime</Filter>
     
    712715      <Filter>runtime</Filter>
    713716    </ClCompile>
     717    <ClCompile Include="..\runtime\SetIteratorPrototype.cpp">
     718      <Filter>runtime</Filter>
     719    </ClCompile>
     720    <ClCompile Include="..\runtime\SetIteratorConstructor.cpp">
     721      <Filter>runtime</Filter>
     722    </ClCompile>
    714723    <ClCompile Include="..\runtime\SetConstructor.cpp">
     724      <Filter>runtime</Filter>
     725    </ClCompile>
     726    <ClCompile Include="..\runtime\SetIteratorConstructor.cpp">
    715727      <Filter>runtime</Filter>
    716728    </ClCompile>
     
    26082620      <Filter>runtime</Filter>
    26092621    </ClInclude>
     2622    <ClInclude Include="..\runtime\JSSetIterator.h">
     2623      <Filter>runtime</Filter>
     2624    </ClInclude>
    26102625    <ClInclude Include="..\llint\LLIntEntrypoint.h">
    26112626      <Filter>llint</Filter>
     
    26202635      <Filter>runtime</Filter>
    26212636    </ClInclude>
     2637    <ClInclude Include="..\runtime\SetIteratorPrototype.h">
     2638      <Filter>runtime</Filter>
     2639    </ClInclude>
    26222640    <ClInclude Include="..\runtime\MapPrototype.h">
    26232641      <Filter>runtime</Filter>
    26242642    </ClInclude>
    26252643    <ClInclude Include="..\runtime\SetConstructor.h">
     2644      <Filter>runtime</Filter>
     2645    </ClInclude>
     2646    <ClInclude Include="..\runtime\SetIteratorConstructor.h">
    26262647      <Filter>runtime</Filter>
    26272648    </ClInclude>
  • trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj

    r159008 r159031  
    977977                A78A9780179738D5009DF744 /* FTLJITFinalizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A78A977D179738D5009DF744 /* FTLJITFinalizer.cpp */; };
    978978                A78A9781179738D5009DF744 /* FTLJITFinalizer.h in Headers */ = {isa = PBXBuildFile; fileRef = A78A977E179738D5009DF744 /* FTLJITFinalizer.h */; };
     979                A790DD6B182F499700588807 /* SetIteratorConstructor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A790DD65182F499700588807 /* SetIteratorConstructor.cpp */; };
     980                A790DD6C182F499700588807 /* SetIteratorConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = A790DD66182F499700588807 /* SetIteratorConstructor.h */; };
     981                A790DD6D182F499700588807 /* SetIteratorPrototype.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A790DD67182F499700588807 /* SetIteratorPrototype.cpp */; };
     982                A790DD6E182F499700588807 /* SetIteratorPrototype.h in Headers */ = {isa = PBXBuildFile; fileRef = A790DD68182F499700588807 /* SetIteratorPrototype.h */; };
     983                A790DD6F182F499700588807 /* JSSetIterator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A790DD69182F499700588807 /* JSSetIterator.cpp */; };
     984                A790DD70182F499700588807 /* JSSetIterator.h in Headers */ = {isa = PBXBuildFile; fileRef = A790DD6A182F499700588807 /* JSSetIterator.h */; };
    979985                A7986D5717A0BB1E00A95DD0 /* DFGEdgeUsesStructure.h in Headers */ = {isa = PBXBuildFile; fileRef = A7986D5617A0BB1E00A95DD0 /* DFGEdgeUsesStructure.h */; settings = {ATTRIBUTES = (Private, ); }; };
    980986                A7A4AE0817973B26005612B1 /* MacroAssemblerX86Common.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A7A4AE0717973B26005612B1 /* MacroAssemblerX86Common.cpp */; };
     
    22672273                A78A977D179738D5009DF744 /* FTLJITFinalizer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = FTLJITFinalizer.cpp; path = ftl/FTLJITFinalizer.cpp; sourceTree = "<group>"; };
    22682274                A78A977E179738D5009DF744 /* FTLJITFinalizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FTLJITFinalizer.h; path = ftl/FTLJITFinalizer.h; sourceTree = "<group>"; };
     2275                A790DD65182F499700588807 /* SetIteratorConstructor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SetIteratorConstructor.cpp; sourceTree = "<group>"; };
     2276                A790DD66182F499700588807 /* SetIteratorConstructor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SetIteratorConstructor.h; sourceTree = "<group>"; };
     2277                A790DD67182F499700588807 /* SetIteratorPrototype.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SetIteratorPrototype.cpp; sourceTree = "<group>"; };
     2278                A790DD68182F499700588807 /* SetIteratorPrototype.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SetIteratorPrototype.h; sourceTree = "<group>"; };
     2279                A790DD69182F499700588807 /* JSSetIterator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSSetIterator.cpp; sourceTree = "<group>"; };
     2280                A790DD6A182F499700588807 /* JSSetIterator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSSetIterator.h; sourceTree = "<group>"; };
    22692281                A7986D5617A0BB1E00A95DD0 /* DFGEdgeUsesStructure.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DFGEdgeUsesStructure.h; path = dfg/DFGEdgeUsesStructure.h; sourceTree = "<group>"; };
    22702282                A79E781E15EECBA80047C855 /* UnlinkedCodeBlock.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UnlinkedCodeBlock.cpp; sourceTree = "<group>"; };
     
    36573669                                A74DEF8F182D991400522C22 /* JSMapIterator.cpp */,
    36583670                                A74DEF90182D991400522C22 /* JSMapIterator.h */,
     3671                                A790DD65182F499700588807 /* SetIteratorConstructor.cpp */,
     3672                                A790DD66182F499700588807 /* SetIteratorConstructor.h */,
     3673                                A790DD67182F499700588807 /* SetIteratorPrototype.cpp */,
     3674                                A790DD68182F499700588807 /* SetIteratorPrototype.h */,
     3675                                A790DD69182F499700588807 /* JSSetIterator.cpp */,
     3676                                A790DD6A182F499700588807 /* JSSetIterator.h */,
    36593677                        );
    36603678                        path = runtime;
     
    44554473                                86CC85A10EE79A4700288682 /* JITInlines.h in Headers */,
    44564474                                0F24E54D17EE274900ABB217 /* JITOperations.h in Headers */,
     4475                                A790DD70182F499700588807 /* JSSetIterator.h in Headers */,
    44574476                                0F24E54E17EE274900ABB217 /* JITOperationWrappers.h in Headers */,
    44584477                                0F766D3115AA8112008F363E /* JITStubRoutine.h in Headers */,
     
    46274646                                86C568E211A213EE0007F7F0 /* MIPSAssembler.h in Headers */,
    46284647                                86EBF3001560F06A008E9222 /* NameConstructor.h in Headers */,
     4648                                A790DD6E182F499700588807 /* SetIteratorPrototype.h in Headers */,
    46294649                                86EBF3021560F06A008E9222 /* NameInstance.h in Headers */,
    46304650                                86EBF3041560F06A008E9222 /* NamePrototype.h in Headers */,
     
    47134733                                86AE64AA135E5E1C00963012 /* SH4Assembler.h in Headers */,
    47144734                                0F2B670517B6B5AB00A7AE3F /* SimpleTypedArrayController.h in Headers */,
     4735                                A790DD6C182F499700588807 /* SetIteratorConstructor.h in Headers */,
    47154736                                14BA78F113AAB88F005B7C2C /* SlotVisitor.h in Headers */,
    47164737                                C2160FE715F7E95E00942DFC /* SlotVisitorInlines.h in Headers */,
     
    52295250                                A7BDAEC617F4EA1400F6140C /* ArrayIteratorConstructor.cpp in Sources */,
    52305251                                A7BDAEC817F4EA1400F6140C /* ArrayIteratorPrototype.cpp in Sources */,
     5252                                A790DD6F182F499700588807 /* JSSetIterator.cpp in Sources */,
    52315253                                0F63945415D07055006A597C /* ArrayProfile.cpp in Sources */,
    52325254                                147F39C0107EC37600427A48 /* ArrayPrototype.cpp in Sources */,
     
    56095631                                A7299DA117D12848005F5FF9 /* SetPrototype.cpp in Sources */,
    56105632                                0F2B670417B6B5AB00A7AE3F /* SimpleTypedArrayController.cpp in Sources */,
     5633                                A790DD6D182F499700588807 /* SetIteratorPrototype.cpp in Sources */,
    56115634                                C225494315F7DBAA0065E898 /* SlotVisitor.cpp in Sources */,
    56125635                                9330402C0E6A764000786E6A /* SmallStrings.cpp in Sources */,
     
    56385661                                0FF4274A158EBE91004CB9FF /* udis86.c in Sources */,
    56395662                                0FF42740158EBE8B004CB9FF /* udis86_decode.c in Sources */,
     5663                                A790DD6B182F499700588807 /* SetIteratorConstructor.cpp in Sources */,
    56405664                                0FF42743158EBE91004CB9FF /* udis86_input.c in Sources */,
    56415665                                0FF4274D158EBFE6004CB9FF /* udis86_itab_holder.c in Sources */,
  • trunk/Source/JavaScriptCore/runtime/CommonIdentifiers.h

    r159008 r159031  
    5252    macro(RegExp) \
    5353    macro(Set)\
     54    macro(SetIterator)\
    5455    macro(String) \
    5556    macro(SyntaxError) \
  • trunk/Source/JavaScriptCore/runtime/JSGlobalObject.cpp

    r159008 r159031  
    7777#include "JSONObject.h"
    7878#include "JSSet.h"
     79#include "JSSetIterator.h"
    7980#include "JSTypedArrayConstructors.h"
    8081#include "JSTypedArrayPrototypes.h"
     
    106107#include "RegExpPrototype.h"
    107108#include "SetConstructor.h"
     109#include "SetIteratorConstructor.h"
     110#include "SetIteratorPrototype.h"
    108111#include "SetPrototype.h"
    109112#include "StrictEvalActivation.h"
  • trunk/Source/JavaScriptCore/runtime/JSGlobalObject.h

    r159008 r159031  
    8787    DEFINE_STANDARD_BUILTIN(macro, ArgumentsIterator, argumentsIterator) \
    8888    DEFINE_STANDARD_BUILTIN(macro, MapIterator, mapIterator) \
     89    DEFINE_STANDARD_BUILTIN(macro, SetIterator, setIterator) \
    8990
    9091
  • trunk/Source/JavaScriptCore/runtime/SetPrototype.cpp

    r156620 r159031  
    3434#include "JSFunctionInlines.h"
    3535#include "JSSet.h"
     36#include "JSSetIterator.h"
    3637#include "MapData.h"
    3738
     
    4546static EncodedJSValue JSC_HOST_CALL setProtoFuncForEach(ExecState*);
    4647static EncodedJSValue JSC_HOST_CALL setProtoFuncHas(ExecState*);
     48static EncodedJSValue JSC_HOST_CALL setProtoFuncKeys(ExecState*);
     49static EncodedJSValue JSC_HOST_CALL setProtoFuncValues(ExecState*);
     50static EncodedJSValue JSC_HOST_CALL setProtoFuncEntries(ExecState*);
     51
    4752
    4853static EncodedJSValue JSC_HOST_CALL setProtoFuncSize(ExecState*);
     
    5964    JSC_NATIVE_FUNCTION(vm.propertyNames->forEach, setProtoFuncForEach, DontEnum, 1);
    6065    JSC_NATIVE_FUNCTION(vm.propertyNames->has, setProtoFuncHas, DontEnum, 1);
     66    JSC_NATIVE_FUNCTION(vm.propertyNames->keys, setProtoFuncKeys, DontEnum, 0);
     67    JSC_NATIVE_FUNCTION(vm.propertyNames->values, setProtoFuncValues, DontEnum, 0);
     68    JSC_NATIVE_FUNCTION(vm.propertyNames->entries, setProtoFuncEntries, DontEnum, 0);
     69    JSC_NATIVE_FUNCTION(vm.propertyNames->iteratorPrivateName, setProtoFuncKeys, DontEnum, 0);
    6170
    6271    GetterSetter* accessor = GetterSetter::create(vm);
     
    151160    return JSValue::encode(jsNumber(data->size(callFrame)));
    152161}
     162   
     163EncodedJSValue JSC_HOST_CALL setProtoFuncValues(CallFrame* callFrame)
     164{
     165    JSSet* thisObj = jsDynamicCast<JSSet*>(callFrame->thisValue());
     166    if (!thisObj)
     167        return JSValue::encode(throwTypeError(callFrame, ASCIILiteral("Cannot create a Map value iterator for a non-Map object.")));
     168    return JSValue::encode(JSSetIterator::create(callFrame->vm(), callFrame->callee()->globalObject()->setIteratorStructure(), thisObj, SetIterateValue));
     169}
     170
     171EncodedJSValue JSC_HOST_CALL setProtoFuncEntries(CallFrame* callFrame)
     172{
     173    JSSet* thisObj = jsDynamicCast<JSSet*>(callFrame->thisValue());
     174    if (!thisObj)
     175        return JSValue::encode(throwTypeError(callFrame, ASCIILiteral("Cannot create a Map key iterator for a non-Map object.")));
     176    return JSValue::encode(JSSetIterator::create(callFrame->vm(), callFrame->callee()->globalObject()->setIteratorStructure(), thisObj, SetIterateKeyValue));
     177}
     178
     179EncodedJSValue JSC_HOST_CALL setProtoFuncKeys(CallFrame* callFrame)
     180{
     181    JSSet* thisObj = jsDynamicCast<JSSet*>(callFrame->thisValue());
     182    if (!thisObj)
     183        return JSValue::encode(throwTypeError(callFrame, ASCIILiteral("Cannot create a Map entry iterator for a non-Map object.")));
     184    return JSValue::encode(JSSetIterator::create(callFrame->vm(), callFrame->callee()->globalObject()->setIteratorStructure(), thisObj, SetIterateKey));
     185}
    153186
    154187}
Note: See TracChangeset for help on using the changeset viewer.