Commit 67709e53 authored by vegorov@chromium.org's avatar vegorov@chromium.org

Fix bug in prototype transitions cache clearing introduced by r8165.

Invalid loop nesting causes full cleanup of the prototype transitions cache on every GC.

R=ager@chromium.org

Review URL: http://codereview.chromium.org/7354020

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@8634 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent be1eee70
...@@ -1661,6 +1661,7 @@ void MarkCompactCollector::ClearNonLiveTransitions() { ...@@ -1661,6 +1661,7 @@ void MarkCompactCollector::ClearNonLiveTransitions() {
// Clear dead prototype transitions. // Clear dead prototype transitions.
int number_of_transitions = map->NumberOfProtoTransitions(); int number_of_transitions = map->NumberOfProtoTransitions();
if (number_of_transitions > 0) {
FixedArray* prototype_transitions = map->unchecked_prototype_transitions(); FixedArray* prototype_transitions = map->unchecked_prototype_transitions();
int new_number_of_transitions = 0; int new_number_of_transitions = 0;
const int header = Map::kProtoTransitionHeaderSize; const int header = Map::kProtoTransitionHeaderSize;
...@@ -1687,6 +1688,7 @@ void MarkCompactCollector::ClearNonLiveTransitions() { ...@@ -1687,6 +1688,7 @@ void MarkCompactCollector::ClearNonLiveTransitions() {
} }
new_number_of_transitions++; new_number_of_transitions++;
} }
}
// Fill slots that became free with undefined value. // Fill slots that became free with undefined value.
Object* undefined = heap()->raw_unchecked_undefined_value(); Object* undefined = heap()->raw_unchecked_undefined_value();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment