Chromium Code Reviews| 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; |