Index: src/type-info.cc |
diff --git a/src/type-info.cc b/src/type-info.cc |
index 6282ef68f90acc6f6e3b74aab049704dc6f42699..35beb1808a6a8d4319237d3a31f66aa034b03466 100644 |
--- a/src/type-info.cc |
+++ b/src/type-info.cc |
@@ -43,12 +43,16 @@ namespace internal { |
TypeFeedbackOracle::TypeFeedbackOracle(Handle<Code> code, |
- Handle<FixedArray> feedback_vector, |
Handle<Context> native_context, |
Zone* zone) |
: native_context_(native_context), |
- zone_(zone), |
- feedback_vector_(feedback_vector) { |
+ zone_(zone) { |
+ Object* raw_info = code->type_feedback_info(); |
+ if (raw_info->IsTypeFeedbackInfo()) { |
+ feedback_vector_ = Handle<FixedArray>(TypeFeedbackInfo::cast(raw_info)-> |
+ feedback_vector()); |
+ } |
+ |
BuildDictionary(code); |
ASSERT(dictionary_->IsDictionary()); |
} |
@@ -128,9 +132,9 @@ bool TypeFeedbackOracle::CallNewIsMonomorphic(int slot) { |
byte TypeFeedbackOracle::ForInType(int feedback_vector_slot) { |
Handle<Object> value = GetInfo(feedback_vector_slot); |
- return value.is_identical_to( |
- TypeFeedbackInfo::UninitializedSentinel(isolate())) |
- ? ForInStatement::FAST_FOR_IN : ForInStatement::SLOW_FOR_IN; |
+ return value->IsSmi() && |
+ Smi::cast(*value)->value() == TypeFeedbackInfo::kForInFastCaseMarker |
+ ? ForInStatement::FAST_FOR_IN : ForInStatement::SLOW_FOR_IN; |
} |