Overwrite the handler using Set.
authorverwaest@chromium.org <verwaest@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Fri, 3 May 2013 08:48:53 +0000 (08:48 +0000)
committerverwaest@chromium.org <verwaest@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Fri, 3 May 2013 08:48:53 +0000 (08:48 +0000)
InsertAt apparently inserts by moving the other elements... that does not work.

Review URL: https://chromiumcodereview.appspot.com/14566007

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@14535 ce2b1a6d-e550-0410-aec6-3dcde31c8c00

src/ic.cc
src/list-inl.h
src/list.h

index 83677bdbcca48abe77358cde401c493920216943..0bfb755d954f11a589f7841ca03a3ff1345db9b8 100644 (file)
--- a/src/ic.cc
+++ b/src/ic.cc
@@ -1022,7 +1022,7 @@ bool IC::UpdatePolymorphicIC(State state,
 
   number_of_valid_maps++;
   if (handler_to_overwrite >= 0) {
-    handlers.InsertAt(handler_to_overwrite, code);
+    handlers.Set(handler_to_overwrite, code);
   } else {
     receiver_maps.Add(new_receiver_map);
     handlers.Add(code);
index d815a7e227004ac6accdca4f928da1d362addabf..143c830ee92ad3d11fe62372dc2a6947557ef8c3 100644 (file)
@@ -103,6 +103,13 @@ Vector<T> List<T, P>::AddBlock(T value, int count, P alloc) {
 }
 
 
+template<typename T, class P>
+void List<T, P>::Set(int index, const T& elm) {
+  ASSERT(index >= 0 && index <= length_);
+  data_[index] = elm;
+}
+
+
 template<typename T, class P>
 void List<T, P>::InsertAt(int index, const T& elm, P alloc) {
   ASSERT(index >= 0 && index <= length_);
index 43d982f687a7b37bfe55a128f47e9e8ee8c12eea..0e4e35bb41b78b3ff5aa8b106ea284d1e4ded91c 100644 (file)
@@ -115,6 +115,9 @@ class List {
   void InsertAt(int index, const T& element,
                 AllocationPolicy allocator = AllocationPolicy());
 
+  // Overwrites the element at the specific index.
+  void Set(int index, const T& element);
+
   // Added 'count' elements with the value 'value' and returns a
   // vector that allows access to the elements.  The vector is valid
   // until the next change is made to this list.