1. 16 Apr, 2014 1 commit
    • adamk@chromium.org's avatar
      ES6: Add support for Map/Set forEach · a1af5a2a
      adamk@chromium.org authored
      This implements MapIterator and SetIterator which matches
      the same constructs in the ES6 spec. However, these 2
      iterators are not exposed to user code yet. They are only
      used internally to implement Map.prototype.forEach and
      Set.prototype.forEach.
      
      Each iterator has a reference to the OrderedHashTable where
      it directly accesses the hash table's entries.
      
      The OrderedHashTable has a reference to the newest iterator
      and each iterator has a reference to the next and previous
      iterator, effectively creating a double linked list.
      
      When the OrderedHashTable is mutated (or replaced) all the
      iterators are updated.
      
      When the iterator iterates passed the end of the data table
      it closes itself. Closed iterators no longer have a
      reference to the OrderedHashTable and they are removed from
      the double linked list. In the case of Map/Set forEach, we
      manually call Close on the iterator in case an exception was
      thrown so that the iterator never reached the end.
      
      At this point the OrderedHashTable keeps all the non finished
      iterators alive but since the only thing we currently expose
      is forEach there are no unfinished iterators outside a forEach
      call. Once we expose the iterators to user code we will need
      to make the references from the OrderedHashTable to the
      iterators weak and have some mechanism to close an iterator
      when it is garbage collected.
      
      BUG=1793,2323
      LOG=Y
      R=adamk@chromium.org, mstarzinger@chromium.org
      
      Review URL: https://codereview.chromium.org/236143002
      
      Patch from Erik Arvidsson <arv@chromium.org>.
      
      git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@20781 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
      a1af5a2a
  2. 15 Apr, 2014 34 commits
  3. 14 Apr, 2014 5 commits