| Index: src/objects.cc
|
| diff --git a/src/objects.cc b/src/objects.cc
|
| index 48d77db4580cb9462380d045ac6fa2e63fbfc868..fc6e34a1aaf00fb47fcfb03af69220e3aecc8a63 100644
|
| --- a/src/objects.cc
|
| +++ b/src/objects.cc
|
| @@ -10631,18 +10631,18 @@ void Code::ClearInlineCaches(Code::Kind* kind) {
|
| }
|
|
|
|
|
| -void Code::ClearTypeFeedbackCells(Heap* heap) {
|
| +void Code::ClearTypeFeedbackInfo(Heap* heap) {
|
| if (kind() != FUNCTION) return;
|
| Object* raw_info = type_feedback_info();
|
| if (raw_info->IsTypeFeedbackInfo()) {
|
| - TypeFeedbackCells* type_feedback_cells =
|
| - TypeFeedbackInfo::cast(raw_info)->type_feedback_cells();
|
| - for (int i = 0; i < type_feedback_cells->CellCount(); i++) {
|
| - Cell* cell = type_feedback_cells->GetCell(i);
|
| - // Don't clear AllocationSites
|
| - Object* value = cell->value();
|
| - if (value == NULL || !value->IsAllocationSite()) {
|
| - cell->set_value(TypeFeedbackCells::RawUninitializedSentinel(heap));
|
| + FixedArray* feedback_vector =
|
| + TypeFeedbackInfo::cast(raw_info)->feedback_vector();
|
| + for (int i = 0; i < feedback_vector->length(); i++) {
|
| + Object* obj = feedback_vector->get(i);
|
| + if (!obj->IsAllocationSite()) {
|
| + // TODO(mvstanton): Can't I avoid a write barrier for this sentinel?
|
| + feedback_vector->set(i,
|
| + TypeFeedbackInfo::RawUninitializedSentinel(heap));
|
| }
|
| }
|
| }
|
| @@ -11091,8 +11091,7 @@ void Code::Disassemble(const char* name, FILE* out) {
|
| }
|
| if (is_inline_cache_stub()) {
|
| PrintF(out, "ic_state = %s\n", ICState2String(ic_state()));
|
| - PrintExtraICState(out, kind(), needs_extended_extra_ic_state(kind()) ?
|
| - extended_extra_ic_state() : extra_ic_state());
|
| + PrintExtraICState(out, kind(), extra_ic_state());
|
| if (ic_state() == MONOMORPHIC) {
|
| PrintF(out, "type = %s\n", StubType2String(type()));
|
| }
|
| @@ -11764,23 +11763,14 @@ bool DependentCode::MarkCodeForDeoptimization(
|
| // Mark all the code that needs to be deoptimized.
|
| bool marked = false;
|
| for (int i = start; i < end; i++) {
|
| - Object* object = object_at(i);
|
| - // TODO(hpayer): This is a temporary hack. Foreign objects move after
|
| - // new space evacuation. Since pretenuring may mark these objects as aborted
|
| - // we have to follow the forwarding pointer in that case.
|
| - MapWord map_word = HeapObject::cast(object)->map_word();
|
| - if (map_word.IsForwardingAddress()) {
|
| - object = map_word.ToForwardingAddress();
|
| - }
|
| - if (object->IsCode()) {
|
| - Code* code = Code::cast(object);
|
| + if (is_code_at(i)) {
|
| + Code* code = code_at(i);
|
| if (!code->marked_for_deoptimization()) {
|
| code->set_marked_for_deoptimization(true);
|
| marked = true;
|
| }
|
| } else {
|
| - CompilationInfo* info = reinterpret_cast<CompilationInfo*>(
|
| - Foreign::cast(object)->foreign_address());
|
| + CompilationInfo* info = compilation_info_at(i);
|
| info->AbortDueToDependencyChange();
|
| }
|
| }
|
|
|