| OLD | NEW |
| 1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 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 #ifndef V8_TYPE_FEEDBACK_VECTOR_H_ | 5 #ifndef V8_TYPE_FEEDBACK_VECTOR_H_ |
| 6 #define V8_TYPE_FEEDBACK_VECTOR_H_ | 6 #define V8_TYPE_FEEDBACK_VECTOR_H_ |
| 7 | 7 |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "src/base/logging.h" | 10 #include "src/base/logging.h" |
| (...skipping 21 matching lines...) Expand all Loading... |
| 32 INTERPRETER_COMPARE_IC, | 32 INTERPRETER_COMPARE_IC, |
| 33 STORE_DATA_PROPERTY_IN_LITERAL_IC, | 33 STORE_DATA_PROPERTY_IN_LITERAL_IC, |
| 34 CREATE_CLOSURE, | 34 CREATE_CLOSURE, |
| 35 LITERAL, | 35 LITERAL, |
| 36 // This is a general purpose slot that occupies one feedback vector element. | 36 // This is a general purpose slot that occupies one feedback vector element. |
| 37 GENERAL, | 37 GENERAL, |
| 38 | 38 |
| 39 KINDS_NUMBER // Last value indicating number of kinds. | 39 KINDS_NUMBER // Last value indicating number of kinds. |
| 40 }; | 40 }; |
| 41 | 41 |
| 42 inline bool IsCallICKind(FeedbackVectorSlotKind kind) { |
| 43 return kind == FeedbackVectorSlotKind::CALL_IC; |
| 44 } |
| 45 |
| 46 inline bool IsLoadICKind(FeedbackVectorSlotKind kind) { |
| 47 return kind == FeedbackVectorSlotKind::LOAD_IC; |
| 48 } |
| 49 |
| 50 inline bool IsLoadGlobalICKind(FeedbackVectorSlotKind kind) { |
| 51 return kind == FeedbackVectorSlotKind::LOAD_GLOBAL_IC; |
| 52 } |
| 53 |
| 54 inline bool IsKeyedLoadICKind(FeedbackVectorSlotKind kind) { |
| 55 return kind == FeedbackVectorSlotKind::KEYED_LOAD_IC; |
| 56 } |
| 57 |
| 58 inline bool IsStoreICKind(FeedbackVectorSlotKind kind) { |
| 59 return kind == FeedbackVectorSlotKind::STORE_IC; |
| 60 } |
| 61 |
| 62 inline bool IsKeyedStoreICKind(FeedbackVectorSlotKind kind) { |
| 63 return kind == FeedbackVectorSlotKind::KEYED_STORE_IC; |
| 64 } |
| 65 |
| 42 std::ostream& operator<<(std::ostream& os, FeedbackVectorSlotKind kind); | 66 std::ostream& operator<<(std::ostream& os, FeedbackVectorSlotKind kind); |
| 43 | 67 |
| 44 | 68 |
| 45 template <typename Derived> | 69 template <typename Derived> |
| 46 class FeedbackVectorSpecBase { | 70 class FeedbackVectorSpecBase { |
| 47 public: | 71 public: |
| 48 inline FeedbackVectorSlot AddSlot(FeedbackVectorSlotKind kind); | 72 inline FeedbackVectorSlot AddSlot(FeedbackVectorSlotKind kind); |
| 49 | 73 |
| 50 FeedbackVectorSlot AddCallICSlot() { | 74 FeedbackVectorSlot AddCallICSlot() { |
| 51 return AddSlot(FeedbackVectorSlotKind::CALL_IC); | 75 return AddSlot(FeedbackVectorSlotKind::CALL_IC); |
| (...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 252 | 276 |
| 253 // Returns slot kind for given slot. | 277 // Returns slot kind for given slot. |
| 254 FeedbackVectorSlotKind GetKind(FeedbackVectorSlot slot) const; | 278 FeedbackVectorSlotKind GetKind(FeedbackVectorSlot slot) const; |
| 255 | 279 |
| 256 static Handle<TypeFeedbackVector> New(Isolate* isolate, | 280 static Handle<TypeFeedbackVector> New(Isolate* isolate, |
| 257 Handle<TypeFeedbackMetadata> metadata); | 281 Handle<TypeFeedbackMetadata> metadata); |
| 258 | 282 |
| 259 static Handle<TypeFeedbackVector> Copy(Isolate* isolate, | 283 static Handle<TypeFeedbackVector> Copy(Isolate* isolate, |
| 260 Handle<TypeFeedbackVector> vector); | 284 Handle<TypeFeedbackVector> vector); |
| 261 | 285 |
| 286 #define DEFINE_SLOT_KIND_PREDICATE(Name) \ |
| 287 bool Name(FeedbackVectorSlot slot) const { return Name##Kind(GetKind(slot)); } |
| 288 |
| 289 DEFINE_SLOT_KIND_PREDICATE(IsCallIC) |
| 290 DEFINE_SLOT_KIND_PREDICATE(IsLoadIC) |
| 291 DEFINE_SLOT_KIND_PREDICATE(IsLoadGlobalIC) |
| 292 DEFINE_SLOT_KIND_PREDICATE(IsKeyedLoadIC) |
| 293 DEFINE_SLOT_KIND_PREDICATE(IsStoreIC) |
| 294 DEFINE_SLOT_KIND_PREDICATE(IsKeyedStoreIC) |
| 295 #undef DEFINE_SLOT_KIND_PREDICATE |
| 296 |
| 262 #ifdef OBJECT_PRINT | 297 #ifdef OBJECT_PRINT |
| 263 // For gdb debugging. | 298 // For gdb debugging. |
| 264 void Print(); | 299 void Print(); |
| 265 #endif // OBJECT_PRINT | 300 #endif // OBJECT_PRINT |
| 266 | 301 |
| 267 DECLARE_PRINTER(TypeFeedbackVector) | 302 DECLARE_PRINTER(TypeFeedbackVector) |
| 268 | 303 |
| 269 // Clears the vector slots. | 304 // Clears the vector slots. |
| 270 void ClearSlots(SharedFunctionInfo* shared) { ClearSlotsImpl(shared, true); } | 305 void ClearSlots(SharedFunctionInfo* shared) { ClearSlotsImpl(shared, true); } |
| 271 | 306 |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 368 virtual ~FeedbackNexus() {} | 403 virtual ~FeedbackNexus() {} |
| 369 | 404 |
| 370 Handle<TypeFeedbackVector> vector_handle() const { | 405 Handle<TypeFeedbackVector> vector_handle() const { |
| 371 DCHECK(vector_ == NULL); | 406 DCHECK(vector_ == NULL); |
| 372 return vector_handle_; | 407 return vector_handle_; |
| 373 } | 408 } |
| 374 TypeFeedbackVector* vector() const { | 409 TypeFeedbackVector* vector() const { |
| 375 return vector_handle_.is_null() ? vector_ : *vector_handle_; | 410 return vector_handle_.is_null() ? vector_ : *vector_handle_; |
| 376 } | 411 } |
| 377 FeedbackVectorSlot slot() const { return slot_; } | 412 FeedbackVectorSlot slot() const { return slot_; } |
| 413 FeedbackVectorSlotKind kind() const { return vector()->GetKind(slot()); } |
| 378 | 414 |
| 379 InlineCacheState ic_state() const { return StateFromFeedback(); } | 415 InlineCacheState ic_state() const { return StateFromFeedback(); } |
| 380 bool IsUninitialized() const { return StateFromFeedback() == UNINITIALIZED; } | 416 bool IsUninitialized() const { return StateFromFeedback() == UNINITIALIZED; } |
| 381 Map* FindFirstMap() const { | 417 Map* FindFirstMap() const { |
| 382 MapHandleList maps; | 418 MapHandleList maps; |
| 383 ExtractMaps(&maps); | 419 ExtractMaps(&maps); |
| 384 if (maps.length() > 0) return *maps.at(0); | 420 if (maps.length() > 0) return *maps.at(0); |
| 385 return NULL; | 421 return NULL; |
| 386 } | 422 } |
| 387 | 423 |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 423 Handle<TypeFeedbackVector> vector_handle_; | 459 Handle<TypeFeedbackVector> vector_handle_; |
| 424 TypeFeedbackVector* vector_; | 460 TypeFeedbackVector* vector_; |
| 425 FeedbackVectorSlot slot_; | 461 FeedbackVectorSlot slot_; |
| 426 }; | 462 }; |
| 427 | 463 |
| 428 | 464 |
| 429 class CallICNexus final : public FeedbackNexus { | 465 class CallICNexus final : public FeedbackNexus { |
| 430 public: | 466 public: |
| 431 CallICNexus(Handle<TypeFeedbackVector> vector, FeedbackVectorSlot slot) | 467 CallICNexus(Handle<TypeFeedbackVector> vector, FeedbackVectorSlot slot) |
| 432 : FeedbackNexus(vector, slot) { | 468 : FeedbackNexus(vector, slot) { |
| 433 DCHECK_EQ(FeedbackVectorSlotKind::CALL_IC, vector->GetKind(slot)); | 469 DCHECK(vector->IsCallIC(slot)); |
| 434 } | 470 } |
| 435 CallICNexus(TypeFeedbackVector* vector, FeedbackVectorSlot slot) | 471 CallICNexus(TypeFeedbackVector* vector, FeedbackVectorSlot slot) |
| 436 : FeedbackNexus(vector, slot) { | 472 : FeedbackNexus(vector, slot) { |
| 437 DCHECK_EQ(FeedbackVectorSlotKind::CALL_IC, vector->GetKind(slot)); | 473 DCHECK(vector->IsCallIC(slot)); |
| 438 } | 474 } |
| 439 | 475 |
| 440 void Clear(Code* host); | 476 void Clear(Code* host); |
| 441 | 477 |
| 442 void ConfigureUninitialized() override; | 478 void ConfigureUninitialized() override; |
| 443 void ConfigureMonomorphicArray(); | 479 void ConfigureMonomorphicArray(); |
| 444 void ConfigureMonomorphic(Handle<JSFunction> function); | 480 void ConfigureMonomorphic(Handle<JSFunction> function); |
| 445 void ConfigureMegamorphic() final; | 481 void ConfigureMegamorphic() final; |
| 446 void ConfigureMegamorphic(int call_count); | 482 void ConfigureMegamorphic(int call_count); |
| 447 | 483 |
| (...skipping 16 matching lines...) Expand all Loading... |
| 464 // Compute the call frequency based on the call count and the invocation | 500 // Compute the call frequency based on the call count and the invocation |
| 465 // count (taken from the type feedback vector). | 501 // count (taken from the type feedback vector). |
| 466 float ComputeCallFrequency(); | 502 float ComputeCallFrequency(); |
| 467 }; | 503 }; |
| 468 | 504 |
| 469 | 505 |
| 470 class LoadICNexus : public FeedbackNexus { | 506 class LoadICNexus : public FeedbackNexus { |
| 471 public: | 507 public: |
| 472 LoadICNexus(Handle<TypeFeedbackVector> vector, FeedbackVectorSlot slot) | 508 LoadICNexus(Handle<TypeFeedbackVector> vector, FeedbackVectorSlot slot) |
| 473 : FeedbackNexus(vector, slot) { | 509 : FeedbackNexus(vector, slot) { |
| 474 DCHECK_EQ(FeedbackVectorSlotKind::LOAD_IC, vector->GetKind(slot)); | 510 DCHECK(vector->IsLoadIC(slot)); |
| 475 } | 511 } |
| 476 explicit LoadICNexus(Isolate* isolate) | 512 explicit LoadICNexus(Isolate* isolate) |
| 477 : FeedbackNexus( | 513 : FeedbackNexus( |
| 478 TypeFeedbackVector::DummyVector(isolate), | 514 TypeFeedbackVector::DummyVector(isolate), |
| 479 FeedbackVectorSlot(TypeFeedbackVector::kDummyLoadICSlot)) {} | 515 FeedbackVectorSlot(TypeFeedbackVector::kDummyLoadICSlot)) {} |
| 480 LoadICNexus(TypeFeedbackVector* vector, FeedbackVectorSlot slot) | 516 LoadICNexus(TypeFeedbackVector* vector, FeedbackVectorSlot slot) |
| 481 : FeedbackNexus(vector, slot) { | 517 : FeedbackNexus(vector, slot) { |
| 482 DCHECK_EQ(FeedbackVectorSlotKind::LOAD_IC, vector->GetKind(slot)); | 518 DCHECK(vector->IsLoadIC(slot)); |
| 483 } | 519 } |
| 484 | 520 |
| 485 void Clear(Code* host); | 521 void Clear(Code* host); |
| 486 | 522 |
| 487 void ConfigureMonomorphic(Handle<Map> receiver_map, Handle<Object> handler); | 523 void ConfigureMonomorphic(Handle<Map> receiver_map, Handle<Object> handler); |
| 488 | 524 |
| 489 void ConfigurePolymorphic(MapHandleList* maps, | 525 void ConfigurePolymorphic(MapHandleList* maps, |
| 490 List<Handle<Object>>* handlers); | 526 List<Handle<Object>>* handlers); |
| 491 | 527 |
| 492 InlineCacheState StateFromFeedback() const override; | 528 InlineCacheState StateFromFeedback() const override; |
| 493 }; | 529 }; |
| 494 | 530 |
| 495 class LoadGlobalICNexus : public FeedbackNexus { | 531 class LoadGlobalICNexus : public FeedbackNexus { |
| 496 public: | 532 public: |
| 497 LoadGlobalICNexus(Handle<TypeFeedbackVector> vector, FeedbackVectorSlot slot) | 533 LoadGlobalICNexus(Handle<TypeFeedbackVector> vector, FeedbackVectorSlot slot) |
| 498 : FeedbackNexus(vector, slot) { | 534 : FeedbackNexus(vector, slot) { |
| 499 DCHECK_EQ(FeedbackVectorSlotKind::LOAD_GLOBAL_IC, vector->GetKind(slot)); | 535 DCHECK(vector->IsLoadGlobalIC(slot)); |
| 500 } | 536 } |
| 501 LoadGlobalICNexus(TypeFeedbackVector* vector, FeedbackVectorSlot slot) | 537 LoadGlobalICNexus(TypeFeedbackVector* vector, FeedbackVectorSlot slot) |
| 502 : FeedbackNexus(vector, slot) { | 538 : FeedbackNexus(vector, slot) { |
| 503 DCHECK_EQ(FeedbackVectorSlotKind::LOAD_GLOBAL_IC, vector->GetKind(slot)); | 539 DCHECK(vector->IsLoadGlobalIC(slot)); |
| 504 } | 540 } |
| 505 | 541 |
| 506 int ExtractMaps(MapHandleList* maps) const final { | 542 int ExtractMaps(MapHandleList* maps) const final { |
| 507 // LoadGlobalICs don't record map feedback. | 543 // LoadGlobalICs don't record map feedback. |
| 508 return 0; | 544 return 0; |
| 509 } | 545 } |
| 510 MaybeHandle<Object> FindHandlerForMap(Handle<Map> map) const final { | 546 MaybeHandle<Object> FindHandlerForMap(Handle<Map> map) const final { |
| 511 return MaybeHandle<Code>(); | 547 return MaybeHandle<Code>(); |
| 512 } | 548 } |
| 513 bool FindHandlers(List<Handle<Object>>* code_list, | 549 bool FindHandlers(List<Handle<Object>>* code_list, |
| 514 int length = -1) const final { | 550 int length = -1) const final { |
| 515 return length == 0; | 551 return length == 0; |
| 516 } | 552 } |
| 517 | 553 |
| 518 void ConfigureMegamorphic() override { UNREACHABLE(); } | 554 void ConfigureMegamorphic() override { UNREACHABLE(); } |
| 519 void Clear(Code* host); | 555 void Clear(Code* host); |
| 520 | 556 |
| 521 void ConfigureUninitialized() override; | 557 void ConfigureUninitialized() override; |
| 522 void ConfigurePropertyCellMode(Handle<PropertyCell> cell); | 558 void ConfigurePropertyCellMode(Handle<PropertyCell> cell); |
| 523 void ConfigureHandlerMode(Handle<Object> handler); | 559 void ConfigureHandlerMode(Handle<Object> handler); |
| 524 | 560 |
| 525 InlineCacheState StateFromFeedback() const override; | 561 InlineCacheState StateFromFeedback() const override; |
| 526 }; | 562 }; |
| 527 | 563 |
| 528 class KeyedLoadICNexus : public FeedbackNexus { | 564 class KeyedLoadICNexus : public FeedbackNexus { |
| 529 public: | 565 public: |
| 530 KeyedLoadICNexus(Handle<TypeFeedbackVector> vector, FeedbackVectorSlot slot) | 566 KeyedLoadICNexus(Handle<TypeFeedbackVector> vector, FeedbackVectorSlot slot) |
| 531 : FeedbackNexus(vector, slot) { | 567 : FeedbackNexus(vector, slot) { |
| 532 DCHECK_EQ(FeedbackVectorSlotKind::KEYED_LOAD_IC, vector->GetKind(slot)); | 568 DCHECK(vector->IsKeyedLoadIC(slot)); |
| 533 } | 569 } |
| 534 explicit KeyedLoadICNexus(Isolate* isolate) | 570 explicit KeyedLoadICNexus(Isolate* isolate) |
| 535 : FeedbackNexus( | 571 : FeedbackNexus( |
| 536 TypeFeedbackVector::DummyVector(isolate), | 572 TypeFeedbackVector::DummyVector(isolate), |
| 537 FeedbackVectorSlot(TypeFeedbackVector::kDummyKeyedLoadICSlot)) {} | 573 FeedbackVectorSlot(TypeFeedbackVector::kDummyKeyedLoadICSlot)) {} |
| 538 KeyedLoadICNexus(TypeFeedbackVector* vector, FeedbackVectorSlot slot) | 574 KeyedLoadICNexus(TypeFeedbackVector* vector, FeedbackVectorSlot slot) |
| 539 : FeedbackNexus(vector, slot) { | 575 : FeedbackNexus(vector, slot) { |
| 540 DCHECK_EQ(FeedbackVectorSlotKind::KEYED_LOAD_IC, vector->GetKind(slot)); | 576 DCHECK(vector->IsKeyedLoadIC(slot)); |
| 541 } | 577 } |
| 542 | 578 |
| 543 void Clear(Code* host); | 579 void Clear(Code* host); |
| 544 | 580 |
| 545 // name can be a null handle for element loads. | 581 // name can be a null handle for element loads. |
| 546 void ConfigureMonomorphic(Handle<Name> name, Handle<Map> receiver_map, | 582 void ConfigureMonomorphic(Handle<Name> name, Handle<Map> receiver_map, |
| 547 Handle<Object> handler); | 583 Handle<Object> handler); |
| 548 // name can be null. | 584 // name can be null. |
| 549 void ConfigurePolymorphic(Handle<Name> name, MapHandleList* maps, | 585 void ConfigurePolymorphic(Handle<Name> name, MapHandleList* maps, |
| 550 List<Handle<Object>>* handlers); | 586 List<Handle<Object>>* handlers); |
| 551 | 587 |
| 552 void ConfigureMegamorphicKeyed(IcCheckType property_type); | 588 void ConfigureMegamorphicKeyed(IcCheckType property_type); |
| 553 | 589 |
| 554 IcCheckType GetKeyType() const; | 590 IcCheckType GetKeyType() const; |
| 555 InlineCacheState StateFromFeedback() const override; | 591 InlineCacheState StateFromFeedback() const override; |
| 556 Name* FindFirstName() const override; | 592 Name* FindFirstName() const override; |
| 557 }; | 593 }; |
| 558 | 594 |
| 559 | 595 |
| 560 class StoreICNexus : public FeedbackNexus { | 596 class StoreICNexus : public FeedbackNexus { |
| 561 public: | 597 public: |
| 562 StoreICNexus(Handle<TypeFeedbackVector> vector, FeedbackVectorSlot slot) | 598 StoreICNexus(Handle<TypeFeedbackVector> vector, FeedbackVectorSlot slot) |
| 563 : FeedbackNexus(vector, slot) { | 599 : FeedbackNexus(vector, slot) { |
| 564 DCHECK_EQ(FeedbackVectorSlotKind::STORE_IC, vector->GetKind(slot)); | 600 DCHECK(vector->IsStoreIC(slot)); |
| 565 } | 601 } |
| 566 explicit StoreICNexus(Isolate* isolate) | 602 explicit StoreICNexus(Isolate* isolate) |
| 567 : FeedbackNexus( | 603 : FeedbackNexus( |
| 568 TypeFeedbackVector::DummyVector(isolate), | 604 TypeFeedbackVector::DummyVector(isolate), |
| 569 FeedbackVectorSlot(TypeFeedbackVector::kDummyStoreICSlot)) {} | 605 FeedbackVectorSlot(TypeFeedbackVector::kDummyStoreICSlot)) {} |
| 570 StoreICNexus(TypeFeedbackVector* vector, FeedbackVectorSlot slot) | 606 StoreICNexus(TypeFeedbackVector* vector, FeedbackVectorSlot slot) |
| 571 : FeedbackNexus(vector, slot) { | 607 : FeedbackNexus(vector, slot) { |
| 572 DCHECK_EQ(FeedbackVectorSlotKind::STORE_IC, vector->GetKind(slot)); | 608 DCHECK(vector->IsStoreIC(slot)); |
| 573 } | 609 } |
| 574 | 610 |
| 575 void Clear(Code* host); | 611 void Clear(Code* host); |
| 576 | 612 |
| 577 void ConfigureMonomorphic(Handle<Map> receiver_map, Handle<Object> handler); | 613 void ConfigureMonomorphic(Handle<Map> receiver_map, Handle<Object> handler); |
| 578 | 614 |
| 579 void ConfigurePolymorphic(MapHandleList* maps, | 615 void ConfigurePolymorphic(MapHandleList* maps, |
| 580 List<Handle<Object>>* handlers); | 616 List<Handle<Object>>* handlers); |
| 581 | 617 |
| 582 InlineCacheState StateFromFeedback() const override; | 618 InlineCacheState StateFromFeedback() const override; |
| 583 }; | 619 }; |
| 584 | 620 |
| 585 | 621 |
| 586 class KeyedStoreICNexus : public FeedbackNexus { | 622 class KeyedStoreICNexus : public FeedbackNexus { |
| 587 public: | 623 public: |
| 588 KeyedStoreICNexus(Handle<TypeFeedbackVector> vector, FeedbackVectorSlot slot) | 624 KeyedStoreICNexus(Handle<TypeFeedbackVector> vector, FeedbackVectorSlot slot) |
| 589 : FeedbackNexus(vector, slot) { | 625 : FeedbackNexus(vector, slot) { |
| 590 DCHECK_EQ(FeedbackVectorSlotKind::KEYED_STORE_IC, vector->GetKind(slot)); | 626 DCHECK(vector->IsKeyedStoreIC(slot)); |
| 591 } | 627 } |
| 592 explicit KeyedStoreICNexus(Isolate* isolate) | 628 explicit KeyedStoreICNexus(Isolate* isolate) |
| 593 : FeedbackNexus( | 629 : FeedbackNexus( |
| 594 TypeFeedbackVector::DummyVector(isolate), | 630 TypeFeedbackVector::DummyVector(isolate), |
| 595 FeedbackVectorSlot(TypeFeedbackVector::kDummyKeyedStoreICSlot)) {} | 631 FeedbackVectorSlot(TypeFeedbackVector::kDummyKeyedStoreICSlot)) {} |
| 596 KeyedStoreICNexus(TypeFeedbackVector* vector, FeedbackVectorSlot slot) | 632 KeyedStoreICNexus(TypeFeedbackVector* vector, FeedbackVectorSlot slot) |
| 597 : FeedbackNexus(vector, slot) { | 633 : FeedbackNexus(vector, slot) { |
| 598 DCHECK_EQ(FeedbackVectorSlotKind::KEYED_STORE_IC, vector->GetKind(slot)); | 634 DCHECK(vector->IsKeyedStoreIC(slot)); |
| 599 } | 635 } |
| 600 | 636 |
| 601 void Clear(Code* host); | 637 void Clear(Code* host); |
| 602 | 638 |
| 603 // name can be a null handle for element loads. | 639 // name can be a null handle for element loads. |
| 604 void ConfigureMonomorphic(Handle<Name> name, Handle<Map> receiver_map, | 640 void ConfigureMonomorphic(Handle<Name> name, Handle<Map> receiver_map, |
| 605 Handle<Object> handler); | 641 Handle<Object> handler); |
| 606 // name can be null. | 642 // name can be null. |
| 607 void ConfigurePolymorphic(Handle<Name> name, MapHandleList* maps, | 643 void ConfigurePolymorphic(Handle<Name> name, MapHandleList* maps, |
| 608 List<Handle<Object>>* handlers); | 644 List<Handle<Object>>* handlers); |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 702 InlineCacheState StateFromFeedback() const override; | 738 InlineCacheState StateFromFeedback() const override; |
| 703 }; | 739 }; |
| 704 | 740 |
| 705 inline BinaryOperationHint BinaryOperationHintFromFeedback(int type_feedback); | 741 inline BinaryOperationHint BinaryOperationHintFromFeedback(int type_feedback); |
| 706 inline CompareOperationHint CompareOperationHintFromFeedback(int type_feedback); | 742 inline CompareOperationHint CompareOperationHintFromFeedback(int type_feedback); |
| 707 | 743 |
| 708 } // namespace internal | 744 } // namespace internal |
| 709 } // namespace v8 | 745 } // namespace v8 |
| 710 | 746 |
| 711 #endif // V8_TRANSITIONS_H_ | 747 #endif // V8_TRANSITIONS_H_ |
| OLD | NEW |