Reviewed by Maciej.
authordarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 29 Oct 2007 04:11:37 +0000 (04:11 +0000)
committerdarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 29 Oct 2007 04:11:37 +0000 (04:11 +0000)
        - fix a storage leak where we ref the UString every time we replace
          a ResolveNode with a LocalVarAccessNode

        * kjs/identifier.h: (KJS::Identifier::Identifier): Added a constructor
        that takes PlacementNewAdopt.

        * kjs/nodes.h: (KJS::ResolveNode::ResolveNode): Initialize the ident
        with PlacementNewAdopt instead of the old value of ident.

        * kjs/ustring.h: (KJS::UString::UString): Added a constructor that
        takes PlacementNewAdopt.

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

JavaScriptCore/ChangeLog
JavaScriptCore/kjs/identifier.h
JavaScriptCore/kjs/nodes.h
JavaScriptCore/kjs/ustring.h

index 1b20ddc8ae176186c56387839579997539da3608..e4cc169d619f0c2a315763c399996fa85b363868 100644 (file)
@@ -1,3 +1,19 @@
+2007-10-28  Darin Adler  <darin@apple.com>
+
+        Reviewed by Maciej.
+
+        - fix a storage leak where we ref the UString every time we replace
+          a ResolveNode with a LocalVarAccessNode
+
+        * kjs/identifier.h: (KJS::Identifier::Identifier): Added a constructor
+        that takes PlacementNewAdopt.
+
+        * kjs/nodes.h: (KJS::ResolveNode::ResolveNode): Initialize the ident
+        with PlacementNewAdopt instead of the old value of ident.
+
+        * kjs/ustring.h: (KJS::UString::UString): Added a constructor that
+        takes PlacementNewAdopt.
+
 2007-10-28  Darin Adler  <darin@apple.com>
 
         - Windows build fix; get rid of unused parameter
index 531e812fd6ad7d6511f1f5cd24c3e7252397ffe3..fc43344da288553bd50eca4bf0ff434391de902f 100644 (file)
@@ -1,6 +1,5 @@
 /*
- *  This file is part of the KDE libraries
- *  Copyright (C) 2003 Apple Computer, Inc
+ *  Copyright (C) 2003, 2006, 2007 Apple Inc. All rights reserved.
  *
  *  This library is free software; you can redistribute it and/or
  *  modify it under the terms of the GNU Library General Public
@@ -34,6 +33,9 @@ namespace KJS {
         Identifier(const UChar* s, int length) : _ustring(add(s, length)) { }
         explicit Identifier(UString::Rep* rep) : _ustring(add(rep)) { } 
         explicit Identifier(const UString& s) : _ustring(add(s.rep())) { }
+
+        // Special constructor for cases where we overwrite an object in place.
+        Identifier(PlacementNewAdoptType) : _ustring(PlacementNewAdopt) { }
         
         const UString& ustring() const { return _ustring; }
         DOM::DOMString domString() const;
index 477cb005dd7042a37116de8693a130ea5a05fd4b..3c53744524faa5c8fdb6197a665f7d258214d9dc 100644 (file)
@@ -89,11 +89,6 @@ namespace KJS {
         PrecExpression
     };
   
-    // Specifies that a Node should adopt the memory layout it was initialized into.
-    // We use this to swap a pre-existing base class node with a more optimized 
-    // subclass node.
-    enum PlacementNewAdoptTag { PlacementNewAdopt };
-
   struct DeclarationStacks {
       typedef Vector<Node*, 16> NodeStack;
       typedef Vector<VarDeclNode*, 16> VarStack;
@@ -116,7 +111,7 @@ namespace KJS {
   class Node {
   public:
     Node() KJS_FAST_CALL;
-    Node(PlacementNewAdoptTag) KJS_FAST_CALL { }
+    Node(PlacementNewAdoptType) KJS_FAST_CALL { }
     virtual ~Node();
 
     virtual JSValue *evaluate(ExecState *exec) KJS_FAST_CALL = 0;
@@ -273,9 +268,10 @@ namespace KJS {
     { 
     }
 
-    ResolveNode(PlacementNewAdoptTag) KJS_FAST_CALL 
+    // Special constructor for cases where we overwrite an object in place.
+    ResolveNode(PlacementNewAdoptType) KJS_FAST_CALL 
         : Node(PlacementNewAdopt)
-        , ident(ident) 
+        , ident(PlacementNewAdopt) 
     {
     }
 
@@ -296,6 +292,7 @@ namespace KJS {
 
   class LocalVarAccessNode : public ResolveNode {
   public:
+    // Overwrites a ResolveNode in place.
     LocalVarAccessNode(size_t i)
         : ResolveNode(PlacementNewAdopt)
     {
index 647deb3f8db8dca745768bbe7a1dadc86a91ded3..729c8150cd7aa7d94310b968d0cdf12713a73bc4 100644 (file)
@@ -1,8 +1,7 @@
 // -*- c-basic-offset: 2 -*-
 /*
- *  This file is part of the KDE libraries
  *  Copyright (C) 1999-2000 Harri Porten (porten@kde.org)
- *  Copyright (C) 2004 Apple Computer, Inc.
+ *  Copyright (C) 2004, 2005, 2006, 2007 Apple Inc. All rights reserved.
  *
  *  This library is free software; you can redistribute it and/or
  *  modify it under the terms of the GNU Library General Public
@@ -51,6 +50,8 @@ class KJScript;
 
 namespace KJS {
 
+    enum PlacementNewAdoptType { PlacementNewAdopt };
+
   class UString;
 
   /**
@@ -222,6 +223,9 @@ namespace KJS {
      */
     ~UString() {}
 
+    // Special constructor for cases where we overwrite an object in place.
+    UString(PlacementNewAdoptType) { }
+
     /**
      * Constructs a string from an int.
      */