Index: src/heap.cc |
diff --git a/src/heap.cc b/src/heap.cc |
index 02b4ca11bde91d816f8d6dfcb24bb5dcc9092a86..8430e3e435a79d2935da0070360dc0dab2edbc9f 100644 |
--- a/src/heap.cc |
+++ b/src/heap.cc |
@@ -3975,40 +3975,22 @@ Map* Heap::SymbolMapForString(String* string) { |
if (InNewSpace(string)) return NULL; |
// Find the corresponding symbol map for strings. |
- Map* map = string->map(); |
- if (map == ascii_string_map()) { |
- return ascii_symbol_map(); |
+ switch (string->map()->instance_type()) { |
+ case STRING_TYPE: return symbol_map(); |
+ case ASCII_STRING_TYPE: return ascii_symbol_map(); |
+ case CONS_STRING_TYPE: return cons_symbol_map(); |
+ case CONS_ASCII_STRING_TYPE: return cons_ascii_symbol_map(); |
+ case EXTERNAL_STRING_TYPE: return external_symbol_map(); |
+ case EXTERNAL_ASCII_STRING_TYPE: return external_ascii_symbol_map(); |
+ case EXTERNAL_STRING_WITH_ASCII_DATA_TYPE: |
+ return external_symbol_with_ascii_data_map(); |
+ case SHORT_EXTERNAL_STRING_TYPE: return short_external_symbol_map(); |
+ case SHORT_EXTERNAL_ASCII_STRING_TYPE: |
+ return short_external_ascii_symbol_map(); |
+ case SHORT_EXTERNAL_STRING_WITH_ASCII_DATA_TYPE: |
+ return short_external_symbol_with_ascii_data_map(); |
+ default: return NULL; // No match found. |
} |
- if (map == string_map()) { |
- return symbol_map(); |
- } |
- if (map == cons_string_map()) { |
- return cons_symbol_map(); |
- } |
- if (map == cons_ascii_string_map()) { |
- return cons_ascii_symbol_map(); |
- } |
- if (map == external_string_map()) { |
- return external_symbol_map(); |
- } |
- if (map == external_ascii_string_map()) { |
- return external_ascii_symbol_map(); |
- } |
- if (map == external_string_with_ascii_data_map()) { |
- return external_symbol_with_ascii_data_map(); |
- } |
- if (map == short_external_string_map()) { |
- return short_external_symbol_map(); |
- } |
- if (map == short_external_ascii_string_map()) { |
- return short_external_ascii_symbol_map(); |
- } |
- if (map == short_external_string_with_ascii_data_map()) { |
- return short_external_symbol_with_ascii_data_map(); |
- } |
- |
- // No match found. |
- return NULL; |
} |