Fix verification of weak maps during initialization.

R=rossberg@chromium.org

Review URL: http://codereview.chromium.org/8135003

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@9517 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent c0345184
...@@ -498,7 +498,7 @@ void JSWeakMap::JSWeakMapVerify() { ...@@ -498,7 +498,7 @@ void JSWeakMap::JSWeakMapVerify() {
CHECK(IsJSWeakMap()); CHECK(IsJSWeakMap());
JSObjectVerify(); JSObjectVerify();
VerifyHeapPointer(table()); VerifyHeapPointer(table());
ASSERT(table()->IsHashTable()); ASSERT(table()->IsHashTable() || table()->IsUndefined());
} }
......
...@@ -3887,7 +3887,7 @@ void JSProxy::InitializeBody(int object_size, Object* value) { ...@@ -3887,7 +3887,7 @@ void JSProxy::InitializeBody(int object_size, Object* value) {
} }
ACCESSORS(JSWeakMap, table, ObjectHashTable, kTableOffset) ACCESSORS(JSWeakMap, table, Object, kTableOffset)
ACCESSORS_GCSAFE(JSWeakMap, next, Object, kNextOffset) ACCESSORS_GCSAFE(JSWeakMap, next, Object, kNextOffset)
......
...@@ -708,7 +708,6 @@ void JSFunctionProxy::JSFunctionProxyPrint(FILE* out) { ...@@ -708,7 +708,6 @@ void JSFunctionProxy::JSFunctionProxyPrint(FILE* out) {
void JSWeakMap::JSWeakMapPrint(FILE* out) { void JSWeakMap::JSWeakMapPrint(FILE* out) {
HeapObject::PrintHeader(out, "JSWeakMap"); HeapObject::PrintHeader(out, "JSWeakMap");
PrintF(out, " - map = 0x%p\n", reinterpret_cast<void*>(map())); PrintF(out, " - map = 0x%p\n", reinterpret_cast<void*>(map()));
PrintF(out, " - number of elements = %d\n", table()->NumberOfElements());
PrintF(out, " - table = "); PrintF(out, " - table = ");
table()->ShortPrint(out); table()->ShortPrint(out);
PrintF(out, "\n"); PrintF(out, "\n");
......
...@@ -1002,8 +1002,7 @@ void JSObject::JSObjectShortPrint(StringStream* accumulator) { ...@@ -1002,8 +1002,7 @@ void JSObject::JSObjectShortPrint(StringStream* accumulator) {
break; break;
} }
case JS_WEAK_MAP_TYPE: { case JS_WEAK_MAP_TYPE: {
int elements = JSWeakMap::cast(this)->table()->NumberOfElements(); accumulator->Add("<JS WeakMap>");
accumulator->Add("<JS WeakMap[%d]>", elements);
break; break;
} }
case JS_REGEXP_TYPE: { case JS_REGEXP_TYPE: {
......
...@@ -6897,7 +6897,7 @@ class JSFunctionProxy: public JSProxy { ...@@ -6897,7 +6897,7 @@ class JSFunctionProxy: public JSProxy {
class JSWeakMap: public JSObject { class JSWeakMap: public JSObject {
public: public:
// [table]: the backing hash table mapping keys to values. // [table]: the backing hash table mapping keys to values.
DECL_ACCESSORS(table, ObjectHashTable) DECL_ACCESSORS(table, Object)
// [next]: linked list of encountered weak maps during GC. // [next]: linked list of encountered weak maps during GC.
DECL_ACCESSORS(next, Object) DECL_ACCESSORS(next, Object)
......
...@@ -716,7 +716,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_WeakMapGet) { ...@@ -716,7 +716,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_WeakMapGet) {
ASSERT(args.length() == 2); ASSERT(args.length() == 2);
CONVERT_ARG_CHECKED(JSWeakMap, weakmap, 0); CONVERT_ARG_CHECKED(JSWeakMap, weakmap, 0);
CONVERT_ARG_CHECKED(JSReceiver, key, 1); CONVERT_ARG_CHECKED(JSReceiver, key, 1);
return weakmap->table()->Lookup(*key); return ObjectHashTable::cast(weakmap->table())->Lookup(*key);
} }
...@@ -726,7 +726,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_WeakMapSet) { ...@@ -726,7 +726,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_WeakMapSet) {
CONVERT_ARG_CHECKED(JSWeakMap, weakmap, 0); CONVERT_ARG_CHECKED(JSWeakMap, weakmap, 0);
CONVERT_ARG_CHECKED(JSReceiver, key, 1); CONVERT_ARG_CHECKED(JSReceiver, key, 1);
Handle<Object> value(args[2]); Handle<Object> value(args[2]);
Handle<ObjectHashTable> table(weakmap->table()); Handle<ObjectHashTable> table(ObjectHashTable::cast(weakmap->table()));
Handle<ObjectHashTable> new_table = PutIntoObjectHashTable(table, key, value); Handle<ObjectHashTable> new_table = PutIntoObjectHashTable(table, key, value);
weakmap->set_table(*new_table); weakmap->set_table(*new_table);
return *value; return *value;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment