Version 3.12.13

Fixed missing tagging of stack value in finally block. (Chromium issue 137496)

Added more support for heap analysis.

Performance and stability improvements on all platforms.

git-svn-id: http://v8.googlecode.com/svn/trunk@12110 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
diff --git a/src/objects-inl.h b/src/objects-inl.h
index 23fb213..feca271 100644
--- a/src/objects-inl.h
+++ b/src/objects-inl.h
@@ -3534,13 +3534,14 @@
 }
 
 
-MaybeObject* Map::AddTransition(String* key, Object* value) {
-  if (HasTransitionArray()) return transitions()->CopyInsert(key, value);
-  return TransitionArray::NewWith(key, value);
+MaybeObject* Map::AddTransition(String* key, Map* target) {
+  if (HasTransitionArray()) return transitions()->CopyInsert(key, target);
+  return TransitionArray::NewWith(key, target);
 }
 
-void Map::SetTransition(int transition_index, Object* value) {
-  transitions()->SetValue(transition_index, value);
+
+void Map::SetTransition(int transition_index, Map* target) {
+  transitions()->SetTarget(transition_index, target);
 }
 
 
@@ -3652,12 +3653,12 @@
   ASSERT((value->IsUndefined() && GetBackPointer()->IsMap()) ||
          (value->IsMap() && GetBackPointer()->IsUndefined()));
   Object* object = READ_FIELD(this, kInstanceDescriptorsOrBackPointerOffset);
-  if (object->IsMap()) {
+  if (object->IsDescriptorArray()) {
+    DescriptorArray::cast(object)->set_back_pointer_storage(value);
+  } else {
     WRITE_FIELD(this, kInstanceDescriptorsOrBackPointerOffset, value);
     CONDITIONAL_WRITE_BARRIER(
         GetHeap(), this, kInstanceDescriptorsOrBackPointerOffset, value, mode);
-  } else {
-    DescriptorArray::cast(object)->set_back_pointer_storage(value);
   }
 }
 
@@ -4300,7 +4301,7 @@
       Map* new_map;
       ElementsKind next_kind = GetFastElementsKindFromSequenceIndex(i);
       MaybeObject* maybe_new_map =
-          current_map->CreateNextElementsTransition(next_kind);
+          current_map->CopyAsElementsKind(next_kind, INSERT_TRANSITION);
       if (!maybe_new_map->To(&new_map)) return maybe_new_map;
       maps->set(next_kind, new_map);
       current_map = new_map;