Reviewed by Hyatt.
authordarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 19 Jan 2006 08:59:03 +0000 (08:59 +0000)
committerdarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 19 Jan 2006 08:59:03 +0000 (08:59 +0000)
        - hash table fixes needed for my WebCore changes

        * kxmlcore/HashTable.h: (KXMLCore::HashTableConstIterator::operator=):
        Added a missing return statement.

        * kxmlcore/HashTraits.h: Fix traits so they work properly for classes where you
        can't instantiate with a 0 by using traits rather than ? : to select the default
        emtpy value of hash table keys.

        - small cleanup of "runtime" code left over from recent JavaScript crash fix

        * bindings/runtime_root.h:
        (KJS::Bindings::RootObject::RootObject): No explicit initialization of _imp needed
        since it's now a ProtectedPtr.
        (KJS::Bindings::RootObject::setRootObjectImp): Remove old code that relied on the
        fact that _imp was 0 and replaced with use of ProtectedPtr.
        (KJS::Bindings::RootObject::rootObjectImp): Updated since _imp is a ProtectedPtr.

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

JavaScriptCore/ChangeLog
JavaScriptCore/bindings/runtime_root.h
JavaScriptCore/kxmlcore/HashTable.h
JavaScriptCore/kxmlcore/HashTraits.h

index 49b9b4e..a8d8619 100644 (file)
@@ -1,3 +1,25 @@
+2006-01-18  Darin Adler  <darin@apple.com>
+
+        Reviewed by Hyatt.
+
+        - hash table fixes needed for my WebCore changes
+
+        * kxmlcore/HashTable.h: (KXMLCore::HashTableConstIterator::operator=):
+        Added a missing return statement.
+
+        * kxmlcore/HashTraits.h: Fix traits so they work properly for classes where you
+        can't instantiate with a 0 by using traits rather than ? : to select the default
+        emtpy value of hash table keys.
+
+        - small cleanup of "runtime" code left over from recent JavaScript crash fix
+
+        * bindings/runtime_root.h:
+        (KJS::Bindings::RootObject::RootObject): No explicit initialization of _imp needed
+        since it's now a ProtectedPtr.
+        (KJS::Bindings::RootObject::setRootObjectImp): Remove old code that relied on the
+        fact that _imp was 0 and replaced with use of ProtectedPtr.
+        (KJS::Bindings::RootObject::rootObjectImp): Updated since _imp is a ProtectedPtr.
+
 2006-01-17  Darin Adler  <darin@apple.com>
 
         Reviewed by Anders.
index 2c6d369..94f8576 100644 (file)
@@ -49,19 +49,11 @@ class RootObject
 {
 friend class JavaJSObject;
 public:
-    RootObject (const void *nativeHandle) : _nativeHandle(nativeHandle), _imp(0), _interpreter(0) {}
-    ~RootObject () {
-        JSLock lock;
-        gcUnprotect(_imp);
-    }
+    RootObject(const void *nativeHandle) : _nativeHandle(nativeHandle), _interpreter(0) {}
     
-    void setRootObjectImp (JSObject *i) { 
-        JSLock lock;
-        _imp = i;
-        gcProtect(_imp);
-    }
+    void setRootObjectImp(JSObject* i) { _imp = i; }
     
-    JSObject *rootObjectImp() const { return _imp; }
+    JSObject *rootObjectImp() const { return _imp.get(); }
     
     void setInterpreter (Interpreter *i);
     Interpreter *interpreter() const { return _interpreter; }
@@ -84,7 +76,7 @@ public:
 
 private:
     const void *_nativeHandle;
-    JSObject *_imp;
+    ProtectedPtr<JSObject> _imp;
     Interpreter *_interpreter;
 
     static FindRootObjectForNativeHandleFunctionPtr _findRootObjectForNativeHandleFunctionPtr;
index 18aad57..4e02a47 100644 (file)
@@ -139,6 +139,8 @@ namespace KXMLCore {
 
             removeIterator(this);
             addIterator(other.m_table, this);
+
+            return *this;
         }
 #endif
 
index 7006882..8bd4fa6 100644 (file)
@@ -44,12 +44,21 @@ namespace KXMLCore {
     template <> struct IsInteger<long long>          { static const bool value = true; };
     template <> struct IsInteger<unsigned long long> { static const bool value = true; };
 
-    template<typename T> struct GenericHashTraits {
+    template<bool isInteger, typename T> struct GenericHashTraitsBase;
+    template<typename T> struct GenericHashTraitsBase<true, T> {
         typedef T TraitType;
-        static const bool emptyValueIsZero = IsInteger<T>::value;
-        static const bool needsDestruction = !IsInteger<T>::value;
-        static TraitType emptyValue() { return IsInteger<T>::value ? 0 : TraitType(); }
+        static const bool emptyValueIsZero = true;
+        static const bool needsDestruction = false;
+        static TraitType emptyValue() { return 0; }
     };
+    template<typename T> struct GenericHashTraitsBase<false, T> {
+        typedef T TraitType;
+        static const bool emptyValueIsZero = false;
+        static const bool needsDestruction = true;
+        static TraitType emptyValue() { return TraitType(); }
+    };
+
+    template<typename T> struct GenericHashTraits : GenericHashTraitsBase<IsInteger<T>::value, T> { };
 
     template<typename T> struct HashTraits : GenericHashTraits<T> { };