Index: src/ast.cc |
diff --git a/src/ast.cc b/src/ast.cc |
index 85482fabf341dcf646d7cc77d8d45a695e3c8282..aeb767ef0c983293cb1b28fb94b1a6efb5aaff44 100644 |
--- a/src/ast.cc |
+++ b/src/ast.cc |
@@ -580,35 +580,6 @@ void Expression::RecordToBooleanTypeFeedback(TypeFeedbackOracle* oracle) { |
} |
-void Assignment::RecordTypeFeedback(TypeFeedbackOracle* oracle, |
- Zone* zone) { |
- Property* prop = target()->AsProperty(); |
- ASSERT(prop != NULL); |
- TypeFeedbackId id = AssignmentFeedbackId(); |
- is_uninitialized_ = oracle->StoreIsUninitialized(id); |
- if (is_uninitialized_) return; |
- |
- is_pre_monomorphic_ = oracle->StoreIsPreMonomorphic(id); |
- is_monomorphic_ = oracle->StoreIsMonomorphicNormal(id); |
- ASSERT(!is_pre_monomorphic_ || !is_monomorphic_); |
- receiver_types_.Clear(); |
- if (prop->key()->IsPropertyName()) { |
- Literal* lit_key = prop->key()->AsLiteral(); |
- ASSERT(lit_key != NULL && lit_key->value()->IsString()); |
- Handle<String> name = Handle<String>::cast(lit_key->value()); |
- oracle->StoreReceiverTypes(this, name, &receiver_types_); |
- } else if (is_monomorphic_) { |
- // Record receiver type for monomorphic keyed stores. |
- receiver_types_.Add(oracle->StoreMonomorphicReceiverType(id), zone); |
- store_mode_ = oracle->GetStoreMode(id); |
- } else if (oracle->StoreIsKeyedPolymorphic(id)) { |
- receiver_types_.Reserve(kMaxKeyedPolymorphism, zone); |
- oracle->CollectKeyedReceiverTypes(id, &receiver_types_); |
- store_mode_ = oracle->GetStoreMode(id); |
- } |
-} |
- |
- |
bool Call::ComputeTarget(Handle<Map> type, Handle<String> name) { |
// If there is an interceptor, we can't compute the target for a direct call. |
if (type->has_named_interceptor()) return false; |
@@ -711,20 +682,21 @@ Handle<JSObject> Call::GetPrototypeForPrimitiveCheck( |
void Call::RecordTypeFeedback(TypeFeedbackOracle* oracle, |
CallKind call_kind) { |
- is_monomorphic_ = oracle->CallIsMonomorphic(this); |
+ is_monomorphic_ = oracle->CallIsMonomorphic(CallFeedbackId()); |
Property* property = expression()->AsProperty(); |
if (property == NULL) { |
// Function call. Specialize for monomorphic calls. |
- if (is_monomorphic_) target_ = oracle->GetCallTarget(this); |
+ if (is_monomorphic_) target_ = oracle->GetCallTarget(CallFeedbackId()); |
} else if (property->key()->IsPropertyName()) { |
// Method call. Specialize for the receiver types seen at runtime. |
Literal* key = property->key()->AsLiteral(); |
ASSERT(key != NULL && key->value()->IsString()); |
Handle<String> name = Handle<String>::cast(key->value()); |
- check_type_ = oracle->GetCallCheckType(this); |
+ check_type_ = oracle->GetCallCheckType(CallFeedbackId()); |
receiver_types_.Clear(); |
if (check_type_ == RECEIVER_MAP_CHECK) { |
- oracle->CallReceiverTypes(this, name, call_kind, &receiver_types_); |
+ oracle->CallReceiverTypes(CallFeedbackId(), |
+ name, arguments()->length(), call_kind, &receiver_types_); |
is_monomorphic_ = is_monomorphic_ && receiver_types_.length() > 0; |
} else { |
holder_ = GetPrototypeForPrimitiveCheck(check_type_, oracle->isolate()); |
@@ -745,17 +717,19 @@ void Call::RecordTypeFeedback(TypeFeedbackOracle* oracle, |
} |
} else { |
if (is_monomorphic_) { |
- keyed_array_call_is_holey_ = oracle->KeyedArrayCallIsHoley(this); |
+ keyed_array_call_is_holey_ = |
+ oracle->KeyedArrayCallIsHoley(CallFeedbackId()); |
} |
} |
} |
void CallNew::RecordTypeFeedback(TypeFeedbackOracle* oracle) { |
- allocation_info_cell_ = oracle->GetCallNewAllocationInfoCell(this); |
- is_monomorphic_ = oracle->CallNewIsMonomorphic(this); |
+ allocation_info_cell_ = |
+ oracle->GetCallNewAllocationInfoCell(CallNewFeedbackId()); |
+ is_monomorphic_ = oracle->CallNewIsMonomorphic(CallNewFeedbackId()); |
if (is_monomorphic_) { |
- target_ = oracle->GetCallNewTarget(this); |
+ target_ = oracle->GetCallNewTarget(CallNewFeedbackId()); |
Object* value = allocation_info_cell_->value(); |
ASSERT(!value->IsTheHole()); |
if (value->IsAllocationSite()) { |
@@ -767,9 +741,9 @@ void CallNew::RecordTypeFeedback(TypeFeedbackOracle* oracle) { |
void ObjectLiteral::Property::RecordTypeFeedback(TypeFeedbackOracle* oracle) { |
- receiver_type_ = oracle->ObjectLiteralStoreIsMonomorphic(this) |
- ? oracle->GetObjectLiteralStoreMap(this) |
- : Handle<Map>::null(); |
+ TypeFeedbackId id = key()->LiteralFeedbackId(); |
+ receiver_type_ = oracle->ObjectLiteralStoreIsMonomorphic(id) |
+ ? oracle->GetObjectLiteralStoreMap(id) : Handle<Map>::null(); |
} |