2008-12-12  Kai BrĂ¼ning  <kai@granus.net>

        Reviewed and tweaked by Darin Adler.

        - fix https://bugs.webkit.org/show_bug.cgi?id=18205
          DOMNode objects are garbage collected although there are strong references
          <rdar://problem/6441200>

        Fixes resurrection bug for wrapper objects by using an NSMapTable with zeroing weak
        memory for the wrapper reference for DOMWrapperCache (DOMInternal.mm),
        JSWrapperCache (WebScriptObject.mm) and wrapperCache (DOMRGBColor.mm).
        BUILDING_ON_TIGER is used to create a Leopard-only NSMapTable or an old-style
        procedural map table for Tiger systems.

        No regression tests yet since we don't currently run any tests in GC mode.

        * bindings/objc/DOMInternal.h: added WebCore::createWrapperCache for use by all three caches
        * bindings/objc/DOMInternal.mm:
        (WebCore::createWrapperCache): Contains the compile-time check for map table creation
        (WebCore::getDOMWrapper): HashMap -> NSMapTable
        (WebCore::addDOMWrapper): ditto
        (WebCore::removeDOMWrapper): ditto
        * bindings/objc/DOMObject.mm: removed [DOMObject finalize]
        * bindings/objc/DOMRGBColor.mm: removed [DOMRGBColor finalize]
        (WebCore::getWrapperForRGB): CFMutableDictionaryRef -> NSMapTable
        (WebCore::setWrapperForRGB): ditto
        (WebCore::removeWrapperForRGB): ditto
        * bindings/objc/WebScriptObject.mm:
        (WebCore::getJSWrapper): HashMap -> NSMapTable
        (WebCore::addJSWrapper): ditto
        (WebCore::removeJSWrapper): ditto
        (-[WebScriptObject finalize]): removed call of removeJSWrapper()



git-svn-id: http://svn.webkit.org/repository/webkit/trunk@39246 268f45cc-cd09-0410-ab3c-d52691b4dbfc
6 files changed