Reviewers: Mads Ager,

Description:
Fix CalculateEmitStore HashMap use.

The hash maps are setup to store strings or smis but instead Literal is being in
them. It seems to only work by accident.

Came across this while implementing ES5 strict mode.

Ran tests (ia32, arm simulator and x64) and presubmit.py.

BUG=
TEST=


Please review this at http://codereview.chromium.org/6170008/

SVN Base: https://v8.googlecode.com/svn/branches/bleeding_edge

Affected files:
  M src/ast.cc


Index: src/ast.cc
diff --git a/src/ast.cc b/src/ast.cc
index 1a6e7681cf4422aebe6087aadc9b3858596ef8ff..6a92b8429847a9e670371f13d2cd337ae1b47ac3 100644
--- a/src/ast.cc
+++ b/src/ast.cc
@@ -215,12 +215,16 @@ bool ObjectLiteral::Property::emit_store() {


 bool IsEqualString(void* first, void* second) {
+  ASSERT((*reinterpret_cast<String**>(first))->IsString());
+  ASSERT((*reinterpret_cast<String**>(second))->IsString());
   Handle<String> h1(reinterpret_cast<String**>(first));
   Handle<String> h2(reinterpret_cast<String**>(second));
   return (*h1)->Equals(*h2);
 }

 bool IsEqualSmi(void* first, void* second) {
+  ASSERT((*reinterpret_cast<Smi**>(first))->IsSmi());
+  ASSERT((*reinterpret_cast<Smi**>(second))->IsSmi());
   Handle<Smi> h1(reinterpret_cast<Smi**>(first));
   Handle<Smi> h2(reinterpret_cast<Smi**>(second));
   return (*h1)->value() == (*h2)->value();
@@ -266,12 +270,12 @@ void ObjectLiteral::CalculateEmitStore() {
     // If the key of a computed property is in the table, do not emit
     // a store for the property later.
     if (property->kind() == ObjectLiteral::Property::COMPUTED) {
-      if (table->Lookup(literal, hash, false) != NULL) {
+      if (table->Lookup(key, hash, false) != NULL) {
         property->set_emit_store(false);
       }
     }
     // Add key to the table.
-    table->Lookup(literal, hash, true);
+    table->Lookup(key, hash, true);
   }
 }



--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev

Reply via email to