OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "src/v8.h" | 5 #include "src/v8.h" |
6 | 6 |
7 #include "src/ast.h" | 7 #include "src/ast.h" |
8 #include "src/code-stubs.h" | 8 #include "src/code-stubs.h" |
9 #include "src/compiler.h" | 9 #include "src/compiler.h" |
10 #include "src/ic/ic.h" | 10 #include "src/ic/ic.h" |
(...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
259 SmallMapList* receiver_types) { | 259 SmallMapList* receiver_types) { |
260 receiver_types->Clear(); | 260 receiver_types->Clear(); |
261 Code::Flags flags = Code::ComputeHandlerFlags(Code::LOAD_IC); | 261 Code::Flags flags = Code::ComputeHandlerFlags(Code::LOAD_IC); |
262 CollectReceiverTypes(id, name, flags, receiver_types); | 262 CollectReceiverTypes(id, name, flags, receiver_types); |
263 } | 263 } |
264 | 264 |
265 | 265 |
266 void TypeFeedbackOracle::KeyedPropertyReceiverTypes( | 266 void TypeFeedbackOracle::KeyedPropertyReceiverTypes( |
267 TypeFeedbackId id, SmallMapList* receiver_types, bool* is_string) { | 267 TypeFeedbackId id, SmallMapList* receiver_types, bool* is_string) { |
268 receiver_types->Clear(); | 268 receiver_types->Clear(); |
269 *is_string = false; | 269 CollectReceiverTypes(id, receiver_types); |
270 if (LoadIsBuiltin(id, Builtins::kKeyedLoadIC_String)) { | 270 |
271 *is_string = true; | 271 // Are all the receiver maps string maps? |
272 } else { | 272 bool all_strings = receiver_types->length() > 0; |
273 CollectReceiverTypes(id, receiver_types); | 273 for (int i = 0; i < receiver_types->length(); i++) { |
| 274 all_strings &= receiver_types->at(i)->IsStringMap(); |
274 } | 275 } |
| 276 *is_string = all_strings; |
275 } | 277 } |
276 | 278 |
277 | 279 |
278 void TypeFeedbackOracle::AssignmentReceiverTypes( | 280 void TypeFeedbackOracle::AssignmentReceiverTypes( |
279 TypeFeedbackId id, Handle<String> name, SmallMapList* receiver_types) { | 281 TypeFeedbackId id, Handle<String> name, SmallMapList* receiver_types) { |
280 receiver_types->Clear(); | 282 receiver_types->Clear(); |
281 Code::Flags flags = Code::ComputeHandlerFlags(Code::STORE_IC); | 283 Code::Flags flags = Code::ComputeHandlerFlags(Code::STORE_IC); |
282 CollectReceiverTypes(id, name, flags, receiver_types); | 284 CollectReceiverTypes(id, name, flags, receiver_types); |
283 } | 285 } |
284 | 286 |
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
461 UnseededNumberDictionary::kNotFound); | 463 UnseededNumberDictionary::kNotFound); |
462 // Dictionary has been allocated with sufficient size for all elements. | 464 // Dictionary has been allocated with sufficient size for all elements. |
463 DisallowHeapAllocation no_need_to_resize_dictionary; | 465 DisallowHeapAllocation no_need_to_resize_dictionary; |
464 HandleScope scope(isolate()); | 466 HandleScope scope(isolate()); |
465 USE(UnseededNumberDictionary::AtNumberPut( | 467 USE(UnseededNumberDictionary::AtNumberPut( |
466 dictionary_, IdToKey(ast_id), handle(target, isolate()))); | 468 dictionary_, IdToKey(ast_id), handle(target, isolate()))); |
467 } | 469 } |
468 | 470 |
469 | 471 |
470 } } // namespace v8::internal | 472 } } // namespace v8::internal |
OLD | NEW |