Index: src/transitions.cc |
diff --git a/src/transitions.cc b/src/transitions.cc |
index 85e5dc7967dccc65235a6b6e274489498eed2e2e..4fe2ace3d94f28736bcef8e94db59e208fc3fee3 100644 |
--- a/src/transitions.cc |
+++ b/src/transitions.cc |
@@ -391,18 +391,23 @@ int TransitionArray::Capacity(Object* raw_transitions) { |
Handle<TransitionArray> TransitionArray::Allocate(Isolate* isolate, |
int number_of_transitions, |
int slack) { |
- Handle<FixedArray> array = isolate->factory()->NewFixedArray( |
- LengthFor(number_of_transitions + slack), TENURED); |
+ Handle<FixedArray> array = isolate->factory()->NewTransitionArray( |
+ LengthFor(number_of_transitions + slack)); |
+ array->set(kNextLinkIndex, isolate->heap()->undefined_value()); |
array->set(kPrototypeTransitionsIndex, Smi::FromInt(0)); |
array->set(kTransitionLengthIndex, Smi::FromInt(number_of_transitions)); |
return Handle<TransitionArray>::cast(array); |
} |
-static void ZapTransitionArray(TransitionArray* transitions) { |
- MemsetPointer(transitions->data_start(), |
+// static |
+void TransitionArray::ZapTransitionArray(TransitionArray* transitions) { |
+ // Do not zap the next link that is used by GC. |
+ STATIC_ASSERT(kNextLinkIndex + 1 == kPrototypeTransitionsIndex); |
+ MemsetPointer(transitions->data_start() + kPrototypeTransitionsIndex, |
transitions->GetHeap()->the_hole_value(), |
- transitions->length()); |
+ transitions->length() - kPrototypeTransitionsIndex); |
+ transitions->SetNumberOfTransitions(0); |
} |