Chromium Code Reviews| 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); |
| } |