Index: src/ast.cc |
diff --git a/src/ast.cc b/src/ast.cc |
index fa01be016c038714976af27bb8c532ef39576bb5..0922d85056727d5cb001ed70eda5e5af22aaed36 100644 |
--- a/src/ast.cc |
+++ b/src/ast.cc |
@@ -239,12 +239,19 @@ void ObjectLiteral::CalculateEmitStore() { |
HashMap* table; |
void* key; |
fschneider
2011/01/24 14:47:52
Could this be made an Object** since that's what .
Lasse Reichstein
2011/01/25 07:48:13
Not without some reinterpret-casts.
There isn't a
|
uint32_t index; |
+ Smi* smi_key_location; |
if (handle->IsSymbol()) { |
Handle<String> name(String::cast(*handle)); |
- ASSERT(!name->AsArrayIndex(&index)); |
- key = name.location(); |
- hash = name->Hash(); |
- table = &properties; |
+ if (name->AsArrayIndex(&index)) { |
+ smi_key_location = Smi::FromInt(index); |
+ key = &smi_key_location; |
+ hash = index; |
+ table = &elements; |
+ } else { |
+ key = name.location(); |
+ hash = name->Hash(); |
+ table = &properties; |
+ } |
} else if (handle->ToArrayIndex(&index)) { |
key = handle.location(); |
hash = index; |