| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 226 index = map->IndexInCodeCache(name, handler); | 226 index = map->IndexInCodeCache(name, handler); |
| 227 if (index >= 0) { | 227 if (index >= 0) { |
| 228 map->RemoveFromCodeCache(String::cast(name), handler, index); | 228 map->RemoveFromCodeCache(String::cast(name), handler, index); |
| 229 } | 229 } |
| 230 } | 230 } |
| 231 return true; | 231 return true; |
| 232 } | 232 } |
| 233 | 233 |
| 234 // The stub is not in the cache. We've ruled out all other kinds of failure | 234 // The stub is not in the cache. We've ruled out all other kinds of failure |
| 235 // except for proptotype chain changes, a deprecated map, a map that's | 235 // except for proptotype chain changes, a deprecated map, a map that's |
| 236 // different from the one that the stub expects, or a constant global property | 236 // different from the one that the stub expects, elements kind changes, or a |
| 237 // that will become mutable. Threat all those situations as prototype failures | 237 // constant global property that will become mutable. Threat all those |
| 238 // (stay monomorphic if possible). | 238 // situations as prototype failures (stay monomorphic if possible). |
| 239 | 239 |
| 240 // If the IC is shared between multiple receivers (slow dictionary mode), then | 240 // If the IC is shared between multiple receivers (slow dictionary mode), then |
| 241 // the map cannot be deprecated and the stub invalidated. | 241 // the map cannot be deprecated and the stub invalidated. |
| 242 if (cache_holder == OWN_MAP) { | 242 if (cache_holder == OWN_MAP) { |
| 243 Map* old_map = target->FindFirstMap(); | 243 Map* old_map = target->FindFirstMap(); |
| 244 if (old_map == map) return true; | 244 if (old_map == map) return true; |
| 245 if (old_map != NULL && old_map->is_deprecated()) return true; | 245 if (old_map != NULL) { |
| 246 if (old_map->is_deprecated()) return true; |
| 247 if (IsMoreGeneralElementsKindTransition(old_map->elements_kind(), |
| 248 map->elements_kind())) { |
| 249 return true; |
| 250 } |
| 251 } |
| 246 } | 252 } |
| 247 | 253 |
| 248 if (receiver->IsGlobalObject()) { | 254 if (receiver->IsGlobalObject()) { |
| 249 if (!name->IsName()) return false; | 255 if (!name->IsName()) return false; |
| 250 Isolate* isolate = target->GetIsolate(); | 256 Isolate* isolate = target->GetIsolate(); |
| 251 LookupResult lookup(isolate); | 257 LookupResult lookup(isolate); |
| 252 GlobalObject* global = GlobalObject::cast(receiver); | 258 GlobalObject* global = GlobalObject::cast(receiver); |
| 253 global->LocalLookupRealNamedProperty(Name::cast(name), &lookup); | 259 global->LocalLookupRealNamedProperty(Name::cast(name), &lookup); |
| 254 if (!lookup.IsFound()) return false; | 260 if (!lookup.IsFound()) return false; |
| 255 PropertyCell* cell = global->GetPropertyCell(&lookup); | 261 PropertyCell* cell = global->GetPropertyCell(&lookup); |
| (...skipping 2866 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3122 #undef ADDR | 3128 #undef ADDR |
| 3123 }; | 3129 }; |
| 3124 | 3130 |
| 3125 | 3131 |
| 3126 Address IC::AddressFromUtilityId(IC::UtilityId id) { | 3132 Address IC::AddressFromUtilityId(IC::UtilityId id) { |
| 3127 return IC_utilities[id]; | 3133 return IC_utilities[id]; |
| 3128 } | 3134 } |
| 3129 | 3135 |
| 3130 | 3136 |
| 3131 } } // namespace v8::internal | 3137 } } // namespace v8::internal |
| OLD | NEW |