Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(204)

Side by Side Diff: src/runtime.cc

Issue 259883002: ES6: Add support for Map and Set Iterator (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Add back @iterator part Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <stdlib.h> 5 #include <stdlib.h>
6 #include <limits> 6 #include <limits>
7 7
8 #include "v8.h" 8 #include "v8.h"
9 9
10 #include "accessors.h" 10 #include "accessors.h"
(...skipping 1566 matching lines...) Expand 10 before | Expand all | Expand 10 after
1577 1577
1578 RUNTIME_FUNCTION(Runtime_SetGetSize) { 1578 RUNTIME_FUNCTION(Runtime_SetGetSize) {
1579 HandleScope scope(isolate); 1579 HandleScope scope(isolate);
1580 ASSERT(args.length() == 1); 1580 ASSERT(args.length() == 1);
1581 CONVERT_ARG_HANDLE_CHECKED(JSSet, holder, 0); 1581 CONVERT_ARG_HANDLE_CHECKED(JSSet, holder, 0);
1582 Handle<OrderedHashSet> table(OrderedHashSet::cast(holder->table())); 1582 Handle<OrderedHashSet> table(OrderedHashSet::cast(holder->table()));
1583 return Smi::FromInt(table->NumberOfElements()); 1583 return Smi::FromInt(table->NumberOfElements());
1584 } 1584 }
1585 1585
1586 1586
1587 RUNTIME_FUNCTION(Runtime_SetCreateIterator) { 1587 RUNTIME_FUNCTION(Runtime_SetIteratorInitialize) {
1588 HandleScope scope(isolate); 1588 HandleScope scope(isolate);
1589 ASSERT(args.length() == 2); 1589 ASSERT(args.length() == 3);
1590 CONVERT_ARG_HANDLE_CHECKED(JSSet, holder, 0); 1590 CONVERT_ARG_HANDLE_CHECKED(JSSetIterator, holder, 0);
1591 CONVERT_SMI_ARG_CHECKED(kind, 1) 1591 CONVERT_ARG_HANDLE_CHECKED(JSSet, set, 1);
1592 CONVERT_SMI_ARG_CHECKED(kind, 2)
1592 RUNTIME_ASSERT(kind == JSSetIterator::kKindValues || 1593 RUNTIME_ASSERT(kind == JSSetIterator::kKindValues ||
1593 kind == JSSetIterator::kKindEntries); 1594 kind == JSSetIterator::kKindEntries);
1594 Handle<OrderedHashSet> table(OrderedHashSet::cast(holder->table())); 1595 Handle<OrderedHashSet> table(OrderedHashSet::cast(set->table()));
1595 return *JSSetIterator::Create(table, kind); 1596 holder->set_table(*table);
1597 holder->set_index(Smi::FromInt(0));
Michael Starzinger 2014/06/02 11:53:36 Remark: This gives a short window of time during w
arv (Not doing code reviews) 2014/06/02 23:40:52 I added IsUndefined checks to the verifier.
1598 holder->set_kind(Smi::FromInt(kind));
1599 return isolate->heap()->undefined_value();
1596 } 1600 }
1597 1601
1598 1602
1599 RUNTIME_FUNCTION(Runtime_SetIteratorNext) { 1603 RUNTIME_FUNCTION(Runtime_SetIteratorNext) {
1600 HandleScope scope(isolate); 1604 HandleScope scope(isolate);
1601 ASSERT(args.length() == 1); 1605 ASSERT(args.length() == 1);
1602 CONVERT_ARG_HANDLE_CHECKED(JSSetIterator, holder, 0); 1606 CONVERT_ARG_HANDLE_CHECKED(JSSetIterator, holder, 0);
1603 return *JSSetIterator::Next(holder); 1607 return *JSSetIterator::Next(holder);
1604 } 1608 }
1605 1609
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
1676 1680
1677 RUNTIME_FUNCTION(Runtime_MapGetSize) { 1681 RUNTIME_FUNCTION(Runtime_MapGetSize) {
1678 HandleScope scope(isolate); 1682 HandleScope scope(isolate);
1679 ASSERT(args.length() == 1); 1683 ASSERT(args.length() == 1);
1680 CONVERT_ARG_HANDLE_CHECKED(JSMap, holder, 0); 1684 CONVERT_ARG_HANDLE_CHECKED(JSMap, holder, 0);
1681 Handle<OrderedHashMap> table(OrderedHashMap::cast(holder->table())); 1685 Handle<OrderedHashMap> table(OrderedHashMap::cast(holder->table()));
1682 return Smi::FromInt(table->NumberOfElements()); 1686 return Smi::FromInt(table->NumberOfElements());
1683 } 1687 }
1684 1688
1685 1689
1686 RUNTIME_FUNCTION(Runtime_MapCreateIterator) { 1690 RUNTIME_FUNCTION(Runtime_MapIteratorInitialize) {
1687 HandleScope scope(isolate); 1691 HandleScope scope(isolate);
1688 ASSERT(args.length() == 2); 1692 ASSERT(args.length() == 3);
1689 CONVERT_ARG_HANDLE_CHECKED(JSMap, holder, 0); 1693 CONVERT_ARG_HANDLE_CHECKED(JSMapIterator, holder, 0);
1690 CONVERT_SMI_ARG_CHECKED(kind, 1) 1694 CONVERT_ARG_HANDLE_CHECKED(JSMap, map, 1);
1695 CONVERT_SMI_ARG_CHECKED(kind, 2)
1691 RUNTIME_ASSERT(kind == JSMapIterator::kKindKeys 1696 RUNTIME_ASSERT(kind == JSMapIterator::kKindKeys
1692 || kind == JSMapIterator::kKindValues 1697 || kind == JSMapIterator::kKindValues
1693 || kind == JSMapIterator::kKindEntries); 1698 || kind == JSMapIterator::kKindEntries);
1694 Handle<OrderedHashMap> table(OrderedHashMap::cast(holder->table())); 1699 Handle<OrderedHashMap> table(OrderedHashMap::cast(map->table()));
1695 return *JSMapIterator::Create(table, kind); 1700 holder->set_table(*table);
1701 holder->set_index(Smi::FromInt(0));
Michael Starzinger 2014/06/02 11:53:36 Likewise.
arv (Not doing code reviews) 2014/06/02 23:40:52 Done.
1702 holder->set_kind(Smi::FromInt(kind));
1703 return isolate->heap()->undefined_value();
1696 } 1704 }
1697 1705
1698 1706
1699 RUNTIME_FUNCTION(Runtime_MapIteratorNext) { 1707 RUNTIME_FUNCTION(Runtime_MapIteratorNext) {
1700 HandleScope scope(isolate); 1708 HandleScope scope(isolate);
1701 ASSERT(args.length() == 1); 1709 ASSERT(args.length() == 1);
1702 CONVERT_ARG_HANDLE_CHECKED(JSMapIterator, holder, 0); 1710 CONVERT_ARG_HANDLE_CHECKED(JSMapIterator, holder, 0);
1703 return *JSMapIterator::Next(holder); 1711 return *JSMapIterator::Next(holder);
1704 } 1712 }
1705 1713
(...skipping 13452 matching lines...) Expand 10 before | Expand all | Expand 10 after
15158 } 15166 }
15159 return NULL; 15167 return NULL;
15160 } 15168 }
15161 15169
15162 15170
15163 const Runtime::Function* Runtime::FunctionForId(Runtime::FunctionId id) { 15171 const Runtime::Function* Runtime::FunctionForId(Runtime::FunctionId id) {
15164 return &(kIntrinsicFunctions[static_cast<int>(id)]); 15172 return &(kIntrinsicFunctions[static_cast<int>(id)]);
15165 } 15173 }
15166 15174
15167 } } // namespace v8::internal 15175 } } // namespace v8::internal
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698