Index: src/transitions.cc |
diff --git a/src/transitions.cc b/src/transitions.cc |
index 0d1b7d65c02c2d3af29f0d1093d276616c150f69..9b52d849b4341e156c5111b6bf9a7e4cb1dfbedb 100644 |
--- a/src/transitions.cc |
+++ b/src/transitions.cc |
@@ -391,7 +391,7 @@ int TransitionArray::Capacity(Object* raw_transitions) { |
Handle<TransitionArray> TransitionArray::Allocate(Isolate* isolate, |
int number_of_transitions, |
int slack) { |
- Handle<FixedArray> array = isolate->factory()->NewFixedArray( |
+ Handle<FixedArray> array = isolate->factory()->NewTransitionArray( |
LengthFor(number_of_transitions + slack)); |
array->set(kPrototypeTransitionsIndex, Smi::FromInt(0)); |
Michael Lippautz
2015/11/27 14:27:28
Do we need to properly initialize the next field?
ulan
2015/11/27 14:43:45
Done.
NewTransitionArray() initializes with undef
|
array->set(kTransitionLengthIndex, Smi::FromInt(number_of_transitions)); |
@@ -399,10 +399,13 @@ Handle<TransitionArray> TransitionArray::Allocate(Isolate* isolate, |
} |
-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); |
} |