| Index: src/type-feedback-vector.cc
|
| diff --git a/src/type-feedback-vector.cc b/src/type-feedback-vector.cc
|
| index b860d12e84f42a741783b8ef1c0c7b9b5f22e3e3..9fb03bb67391b28e275c87faf194ef88d1e82a5e 100644
|
| --- a/src/type-feedback-vector.cc
|
| +++ b/src/type-feedback-vector.cc
|
| @@ -13,6 +13,13 @@
|
| namespace v8 {
|
| namespace internal {
|
|
|
| +
|
| +static bool IsPropertyNameFeedback(Object* feedback) {
|
| + return feedback->IsString() ||
|
| + (feedback->IsSymbol() && !Symbol::cast(feedback)->is_private());
|
| +}
|
| +
|
| +
|
| std::ostream& operator<<(std::ostream& os, FeedbackVectorSlotKind kind) {
|
| return os << TypeFeedbackMetadata::Kind2String(kind);
|
| }
|
| @@ -650,9 +657,10 @@ void KeyedStoreICNexus::ConfigurePolymorphic(MapHandleList* maps,
|
| int FeedbackNexus::ExtractMaps(MapHandleList* maps) const {
|
| Isolate* isolate = GetIsolate();
|
| Object* feedback = GetFeedback();
|
| - if (feedback->IsFixedArray() || feedback->IsString()) {
|
| + bool is_named_feedback = IsPropertyNameFeedback(feedback);
|
| + if (feedback->IsFixedArray() || is_named_feedback) {
|
| int found = 0;
|
| - if (feedback->IsString()) {
|
| + if (is_named_feedback) {
|
| feedback = GetFeedbackExtra();
|
| }
|
| FixedArray* array = FixedArray::cast(feedback);
|
| @@ -687,8 +695,9 @@ int FeedbackNexus::ExtractMaps(MapHandleList* maps) const {
|
|
|
| MaybeHandle<Code> FeedbackNexus::FindHandlerForMap(Handle<Map> map) const {
|
| Object* feedback = GetFeedback();
|
| - if (feedback->IsFixedArray() || feedback->IsString()) {
|
| - if (feedback->IsString()) {
|
| + bool is_named_feedback = IsPropertyNameFeedback(feedback);
|
| + if (feedback->IsFixedArray() || is_named_feedback) {
|
| + if (is_named_feedback) {
|
| feedback = GetFeedbackExtra();
|
| }
|
| FixedArray* array = FixedArray::cast(feedback);
|
| @@ -725,8 +734,9 @@ MaybeHandle<Code> FeedbackNexus::FindHandlerForMap(Handle<Map> map) const {
|
| bool FeedbackNexus::FindHandlers(CodeHandleList* code_list, int length) const {
|
| Object* feedback = GetFeedback();
|
| int count = 0;
|
| - if (feedback->IsFixedArray() || feedback->IsString()) {
|
| - if (feedback->IsString()) {
|
| + bool is_named_feedback = IsPropertyNameFeedback(feedback);
|
| + if (feedback->IsFixedArray() || is_named_feedback) {
|
| + if (is_named_feedback) {
|
| feedback = GetFeedbackExtra();
|
| }
|
| FixedArray* array = FixedArray::cast(feedback);
|
| @@ -770,7 +780,7 @@ void KeyedLoadICNexus::Clear(Code* host) {
|
|
|
| Name* KeyedLoadICNexus::FindFirstName() const {
|
| Object* feedback = GetFeedback();
|
| - if (feedback->IsString()) {
|
| + if (IsPropertyNameFeedback(feedback)) {
|
| return Name::cast(feedback);
|
| }
|
| return NULL;
|
| @@ -779,7 +789,7 @@ Name* KeyedLoadICNexus::FindFirstName() const {
|
|
|
| Name* KeyedStoreICNexus::FindFirstName() const {
|
| Object* feedback = GetFeedback();
|
| - if (feedback->IsString()) {
|
| + if (IsPropertyNameFeedback(feedback)) {
|
| return Name::cast(feedback);
|
| }
|
| return NULL;
|
|
|