Reviewed by Maciej.
authordarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 19 May 2005 00:50:10 +0000 (00:50 +0000)
committerdarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 19 May 2005 00:50:10 +0000 (00:50 +0000)
        - fix a failure seen in the Mozilla JavaScript tests where a live object was garbage-collected
          when the only reference to it was in an argList on the stack

        * kjs/list.h: Moved the operator= function into the .cpp file since it's too big to be
        a good choice to inline.
        * kjs/list.cpp: (KJS::List::operator=): Moved this formerly-inline function into a separate
        file and added missing code to update valueRefCount. It's the latter that fixes the bug.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@9179 268f45cc-cd09-0410-ab3c-d52691b4dbfc

JavaScriptCore/ChangeLog
JavaScriptCore/kjs/list.cpp
JavaScriptCore/kjs/list.h

index a797587ccac00cf05b1bd1d83c3cae883397a227..cb59d2adfa117fe672ec3b75353f7c8dccc80e85 100644 (file)
@@ -1,3 +1,15 @@
+2005-05-18  Darin Adler  <darin@apple.com>
+
+        Reviewed by Maciej.
+
+        - fix a failure seen in the Mozilla JavaScript tests where a live object was garbage-collected
+          when the only reference to it was in an argList on the stack
+
+        * kjs/list.h: Moved the operator= function into the .cpp file since it's too big to be
+        a good choice to inline.
+        * kjs/list.cpp: (KJS::List::operator=): Moved this formerly-inline function into a separate
+        file and added missing code to update valueRefCount. It's the latter that fixes the bug.
+
 2005-05-16  Darin Adler  <darin@apple.com>
 
         Reviewed by Adele.
index 325def3235d86f79f7e8dd5ff256064dad86eab3..13e65f2d8df1b1dc9253d37694269802d86a1bf2 100644 (file)
@@ -326,4 +326,15 @@ const List &List::empty()
     return emptyList;
 }
 
+List &List::operator=(const List &b)
+{
+    ListImpBase *bImpBase = b._impBase;
+    ++bImpBase->refCount;
+    if (!_needsMarking)
+        ++bImpBase->valueRefCount;
+    deref();
+    _impBase = bImpBase;
+    return *this;
+}
+
 } // namespace KJS
index d3e2fce24ec4a51ad93fec17fb0a445491332eab..124bedc7b48d935dfd81040d5affedb0544b032b 100644 (file)
@@ -185,15 +185,6 @@ namespace KJS {
     inline ListIterator List::begin() const { return ListIterator(*this); }
     inline ListIterator List::end() const { return ListIterator(*this, size()); }
  
-    inline List &List::operator=(const List &b)
-    {
-        ListImpBase *bImpBase = b._impBase;
-        ++bImpBase->refCount;
-        deref();
-        _impBase = bImpBase;
-        return *this;
-    }
-
 } // namespace KJS
 
 #endif // KJS_LIST_H