Revision: 13829
Author: [email protected]
Date: Tue Mar 5 09:24:08 2013
Log: ES6 symbols: enable symbols as weak map keys
[email protected]
BUG=
Review URL: https://codereview.chromium.org/12456004
http://code.google.com/p/v8/source/detail?r=13829
Modified:
/branches/bleeding_edge/src/collection.js
/branches/bleeding_edge/src/runtime.cc
/branches/bleeding_edge/test/mjsunit/harmony/symbols.js
=======================================
--- /branches/bleeding_edge/src/collection.js Fri Nov 9 01:01:29 2012
+++ /branches/bleeding_edge/src/collection.js Tue Mar 5 09:24:08 2013
@@ -197,7 +197,7 @@
throw MakeTypeError('incompatible_method_receiver',
['WeakMap.prototype.get', this]);
}
- if (!IS_SPEC_OBJECT(key)) {
+ if (!(IS_SPEC_OBJECT(key) || IS_SYMBOL(key))) {
throw %MakeTypeError('invalid_weakmap_key', [this, key]);
}
return %WeakMapGet(this, key);
@@ -209,7 +209,7 @@
throw MakeTypeError('incompatible_method_receiver',
['WeakMap.prototype.set', this]);
}
- if (!IS_SPEC_OBJECT(key)) {
+ if (!(IS_SPEC_OBJECT(key) || IS_SYMBOL(key))) {
throw %MakeTypeError('invalid_weakmap_key', [this, key]);
}
return %WeakMapSet(this, key, value);
@@ -221,7 +221,7 @@
throw MakeTypeError('incompatible_method_receiver',
['WeakMap.prototype.has', this]);
}
- if (!IS_SPEC_OBJECT(key)) {
+ if (!(IS_SPEC_OBJECT(key) || IS_SYMBOL(key))) {
throw %MakeTypeError('invalid_weakmap_key', [this, key]);
}
return %WeakMapHas(this, key);
@@ -233,7 +233,7 @@
throw MakeTypeError('incompatible_method_receiver',
['WeakMap.prototype.delete', this]);
}
- if (!IS_SPEC_OBJECT(key)) {
+ if (!(IS_SPEC_OBJECT(key) || IS_SYMBOL(key))) {
throw %MakeTypeError('invalid_weakmap_key', [this, key]);
}
return %WeakMapDelete(this, key);
=======================================
--- /branches/bleeding_edge/src/runtime.cc Tue Mar 5 08:22:08 2013
+++ /branches/bleeding_edge/src/runtime.cc Tue Mar 5 09:24:08 2013
@@ -899,7 +899,7 @@
HandleScope scope(isolate);
ASSERT(args.length() == 2);
CONVERT_ARG_HANDLE_CHECKED(JSWeakMap, weakmap, 0);
- CONVERT_ARG_HANDLE_CHECKED(JSReceiver, key, 1);
+ CONVERT_ARG_HANDLE_CHECKED(Object, key, 1);
Handle<ObjectHashTable> table(ObjectHashTable::cast(weakmap->table()));
Handle<Object> lookup(table->Lookup(*key), isolate);
return lookup->IsTheHole() ? isolate->heap()->undefined_value() :
*lookup;
@@ -910,7 +910,7 @@
HandleScope scope(isolate);
ASSERT(args.length() == 2);
CONVERT_ARG_HANDLE_CHECKED(JSWeakMap, weakmap, 0);
- CONVERT_ARG_HANDLE_CHECKED(JSReceiver, key, 1);
+ CONVERT_ARG_HANDLE_CHECKED(Object, key, 1);
Handle<ObjectHashTable> table(ObjectHashTable::cast(weakmap->table()));
Handle<Object> lookup(table->Lookup(*key), isolate);
return isolate->heap()->ToBoolean(!lookup->IsTheHole());
@@ -921,7 +921,7 @@
HandleScope scope(isolate);
ASSERT(args.length() == 2);
CONVERT_ARG_HANDLE_CHECKED(JSWeakMap, weakmap, 0);
- CONVERT_ARG_HANDLE_CHECKED(JSReceiver, key, 1);
+ CONVERT_ARG_HANDLE_CHECKED(Object, key, 1);
Handle<ObjectHashTable> table(ObjectHashTable::cast(weakmap->table()));
Handle<Object> lookup(table->Lookup(*key), isolate);
Handle<ObjectHashTable> new_table =
@@ -935,7 +935,7 @@
HandleScope scope(isolate);
ASSERT(args.length() == 3);
CONVERT_ARG_HANDLE_CHECKED(JSWeakMap, weakmap, 0);
- CONVERT_ARG_HANDLE_CHECKED(JSReceiver, key, 1);
+ CONVERT_ARG_HANDLE_CHECKED(Object, key, 1);
Handle<Object> value(args[2], isolate);
Handle<ObjectHashTable> table(ObjectHashTable::cast(weakmap->table()));
Handle<ObjectHashTable> new_table = PutIntoObjectHashTable(table, key,
value);
=======================================
--- /branches/bleeding_edge/test/mjsunit/harmony/symbols.js Mon Mar 4
07:00:57 2013
+++ /branches/bleeding_edge/test/mjsunit/harmony/symbols.js Tue Mar 5
09:24:08 2013
@@ -114,17 +114,33 @@
TestSet()
-function TestMap() {
+function TestCollections() {
+ var set = new Set
var map = new Map
+ var weakmap = new WeakMap
for (var i in symbols) {
+ set.add(symbols[i])
map.set(symbols[i], i)
+ weakmap.set(symbols[i], i)
}
+ assertEquals(symbols.length, set.size)
+ assertEquals(symbols.length, map.size)
for (var i in symbols) {
+ assertTrue(set.has(symbols[i]))
assertTrue(map.has(symbols[i]))
+ assertTrue(weakmap.has(symbols[i]))
assertEquals(i, map.get(symbols[i]))
+ assertEquals(i, weakmap.get(symbols[i]))
+ }
+ for (var i in symbols) {
+ assertTrue(set.delete(symbols[i]))
+ assertTrue(map.delete(symbols[i]))
+ assertTrue(weakmap.delete(symbols[i]))
}
+ assertEquals(0, set.size)
+ assertEquals(0, map.size)
}
-TestMap()
+TestCollections()
--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.