Revision: 9215
Author:   [email protected]
Date:     Fri Sep  9 15:39:47 2011
Log:      Rename SmartPointer to SmartArrayPointer.

As pointed out in: http://codereview.chromium.org/7754007/#msg5

"SmartPointer should have been named SmartArrayPointer as it expects an input allocated using new[] and deallocates it using delete[]. Using it as a simple
scoped pointer for a single object is incorrect."

[email protected]

Review URL: http://codereview.chromium.org/7860011
Patch from Thiago Farina <[email protected]>.
http://code.google.com/p/v8/source/detail?r=9215

Added:
 /branches/bleeding_edge/src/smart-array-pointer.h
Deleted:
 /branches/bleeding_edge/src/smart-pointer.h
Modified:
 /branches/bleeding_edge/src/arm/lithium-arm.cc
 /branches/bleeding_edge/src/arm/lithium-codegen-arm.cc
 /branches/bleeding_edge/src/ast.cc
 /branches/bleeding_edge/src/ast.h
 /branches/bleeding_edge/src/code-stubs.cc
 /branches/bleeding_edge/src/code-stubs.h
 /branches/bleeding_edge/src/d8-debug.cc
 /branches/bleeding_edge/src/d8-debug.h
 /branches/bleeding_edge/src/d8-readline.cc
 /branches/bleeding_edge/src/d8.cc
 /branches/bleeding_edge/src/d8.h
 /branches/bleeding_edge/src/debug-agent.cc
 /branches/bleeding_edge/src/debug-agent.h
 /branches/bleeding_edge/src/disassembler.cc
 /branches/bleeding_edge/src/flags.cc
 /branches/bleeding_edge/src/gdb-jit.cc
 /branches/bleeding_edge/src/hydrogen-instructions.cc
 /branches/bleeding_edge/src/hydrogen.cc
 /branches/bleeding_edge/src/ia32/lithium-codegen-ia32.cc
 /branches/bleeding_edge/src/ia32/lithium-ia32.cc
 /branches/bleeding_edge/src/liveobjectlist.cc
 /branches/bleeding_edge/src/log-utils.cc
 /branches/bleeding_edge/src/log.cc
 /branches/bleeding_edge/src/messages.cc
 /branches/bleeding_edge/src/messages.h
 /branches/bleeding_edge/src/objects.cc
 /branches/bleeding_edge/src/objects.h
 /branches/bleeding_edge/src/parser.cc
 /branches/bleeding_edge/src/platform-win32.cc
 /branches/bleeding_edge/src/prettyprinter.cc
 /branches/bleeding_edge/src/runtime.cc
 /branches/bleeding_edge/src/scopes.cc
 /branches/bleeding_edge/src/string-stream.cc
 /branches/bleeding_edge/src/string-stream.h
 /branches/bleeding_edge/src/x64/lithium-codegen-x64.cc
 /branches/bleeding_edge/src/x64/lithium-x64.cc
 /branches/bleeding_edge/test/cctest/test-debug.cc
 /branches/bleeding_edge/test/cctest/test-func-name-inference.cc
 /branches/bleeding_edge/test/cctest/test-heap-profiler.cc
 /branches/bleeding_edge/test/cctest/test-parsing.cc
 /branches/bleeding_edge/test/cctest/test-regexp.cc
 /branches/bleeding_edge/test/cctest/test-reloc-info.cc
 /branches/bleeding_edge/tools/gyp/v8.gyp

=======================================
--- /dev/null
+++ /branches/bleeding_edge/src/smart-array-pointer.h Fri Sep 9 15:39:47 2011
@@ -0,0 +1,100 @@
+// Copyright 2011 the V8 project authors. All rights reserved.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+//       notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+//       copyright notice, this list of conditions and the following
+//       disclaimer in the documentation and/or other materials provided
+//       with the distribution.
+//     * Neither the name of Google Inc. nor the names of its
+//       contributors may be used to endorse or promote products derived
+//       from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#ifndef V8_SMART_ARRAY_POINTER_H_
+#define V8_SMART_ARRAY_POINTER_H_
+
+namespace v8 {
+namespace internal {
+
+
+// A 'scoped array pointer' that calls DeleteArray on its pointer when the
+// destructor is called.
+template<typename T>
+class SmartArrayPointer {
+ public:
+  // Default constructor. Constructs an empty scoped pointer.
+  inline SmartArrayPointer() : p_(NULL) {}
+
+  // Constructs a scoped pointer from a plain one.
+  explicit inline SmartArrayPointer(T* ptr) : p_(ptr) {}
+
+  // Copy constructor removes the pointer from the original to avoid double
+  // freeing.
+  inline SmartArrayPointer(const SmartArrayPointer<T>& rhs) : p_(rhs.p_) {
+    const_cast<SmartArrayPointer<T>&>(rhs).p_ = NULL;
+  }
+
+ // When the destructor of the scoped pointer is executed the plain pointer + // is deleted using DeleteArray. This implies that you must allocate with
+  // NewArray.
+  inline ~SmartArrayPointer() { if (p_) DeleteArray(p_); }
+
+  inline T* operator->() const { return p_; }
+
+  // You can get the underlying pointer out with the * operator.
+  inline T* operator*() { return p_; }
+
+  // You can use [n] to index as if it was a plain pointer
+  inline T& operator[](size_t i) {
+    return p_[i];
+  }
+
+ // We don't have implicit conversion to a T* since that hinders migration:
+  // You would not be able to change a method from returning a T* to
+ // returning an SmartArrayPointer<T> and then get errors wherever it is used.
+
+
+ // If you want to take out the plain pointer and don't want it automatically
+  // deleted then call Detach().  Afterwards, the smart pointer is empty
+  // (NULL).
+  inline T* Detach() {
+    T* temp = p_;
+    p_ = NULL;
+    return temp;
+  }
+
+ // Assignment requires an empty (NULL) SmartArrayPointer as the receiver. Like
+  // the copy constructor it removes the pointer in the original to avoid
+  // double freeing.
+  inline SmartArrayPointer& operator=(const SmartArrayPointer<T>& rhs) {
+    ASSERT(is_empty());
+    T* tmp = rhs.p_;  // swap to handle self-assignment
+    const_cast<SmartArrayPointer<T>&>(rhs).p_ = NULL;
+    p_ = tmp;
+    return *this;
+  }
+
+  inline bool is_empty() { return p_ == NULL; }
+
+ private:
+  T* p_;
+};
+
+} }  // namespace v8::internal
+
+#endif  // V8_SMART_ARRAY_POINTER_H_
=======================================
--- /branches/bleeding_edge/src/smart-pointer.h Thu Sep  8 06:51:06 2011
+++ /dev/null
@@ -1,100 +0,0 @@
-// Copyright 2008 the V8 project authors. All rights reserved.
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-//       notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-//       copyright notice, this list of conditions and the following
-//       disclaimer in the documentation and/or other materials provided
-//       with the distribution.
-//     * Neither the name of Google Inc. nor the names of its
-//       contributors may be used to endorse or promote products derived
-//       from this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-#ifndef V8_SMART_POINTER_H_
-#define V8_SMART_POINTER_H_
-
-namespace v8 {
-namespace internal {
-
-
-// A 'scoped array pointer' that calls DeleteArray on its pointer when the
-// destructor is called.
-template<typename T>
-class SmartPointer {
- public:
-  // Default constructor. Constructs an empty scoped pointer.
-  inline SmartPointer() : p_(NULL) {}
-
-  // Constructs a scoped pointer from a plain one.
-  explicit inline SmartPointer(T* ptr) : p_(ptr) {}
-
-  // Copy constructor removes the pointer from the original to avoid double
-  // freeing.
-  inline SmartPointer(const SmartPointer<T>& rhs) : p_(rhs.p_) {
-    const_cast<SmartPointer<T>&>(rhs).p_ = NULL;
-  }
-
- // When the destructor of the scoped pointer is executed the plain pointer - // is deleted using DeleteArray. This implies that you must allocate with
-  // NewArray.
-  inline ~SmartPointer() { if (p_) DeleteArray(p_); }
-
-  inline T* operator->() const { return p_; }
-
-  // You can get the underlying pointer out with the * operator.
-  inline T* operator*() { return p_; }
-
-  // You can use [n] to index as if it was a plain pointer
-  inline T& operator[](size_t i) {
-    return p_[i];
-  }
-
- // We don't have implicit conversion to a T* since that hinders migration:
-  // You would not be able to change a method from returning a T* to
-  // returning an SmartPointer<T> and then get errors wherever it is used.
-
-
- // If you want to take out the plain pointer and don't want it automatically
-  // deleted then call Detach().  Afterwards, the smart pointer is empty
-  // (NULL).
-  inline T* Detach() {
-    T* temp = p_;
-    p_ = NULL;
-    return temp;
-  }
-
- // Assignment requires an empty (NULL) SmartPointer as the receiver. Like
-  // the copy constructor it removes the pointer in the original to avoid
-  // double freeing.
-  inline SmartPointer& operator=(const SmartPointer<T>& rhs) {
-    ASSERT(is_empty());
-    T* tmp = rhs.p_;  // swap to handle self-assignment
-    const_cast<SmartPointer<T>&>(rhs).p_ = NULL;
-    p_ = tmp;
-    return *this;
-  }
-
-  inline bool is_empty() { return p_ == NULL; }
-
- private:
-  T* p_;
-};
-
-} }  // namespace v8::internal
-
-#endif  // V8_SMART_POINTER_H_
=======================================
--- /branches/bleeding_edge/src/arm/lithium-arm.cc      Fri Sep  9 02:35:57 2011
+++ /branches/bleeding_edge/src/arm/lithium-arm.cc      Fri Sep  9 15:39:47 2011
@@ -311,13 +311,13 @@


 void LCallNamed::PrintDataTo(StringStream* stream) {
-  SmartPointer<char> name_string = name()->ToCString();
+  SmartArrayPointer<char> name_string = name()->ToCString();
   stream->Add("%s #%d / ", *name_string, arity());
 }


 void LCallGlobal::PrintDataTo(StringStream* stream) {
-  SmartPointer<char> name_string = name()->ToCString();
+  SmartArrayPointer<char> name_string = name()->ToCString();
   stream->Add("%s #%d / ", *name_string, arity());
 }

@@ -546,7 +546,8 @@

 void LChunkBuilder::Abort(const char* format, ...) {
   if (FLAG_trace_bailout) {
- SmartPointer<char> name(info()->shared_info()->DebugName()->ToCString());
+    SmartArrayPointer<char> name(
+        info()->shared_info()->DebugName()->ToCString());
     PrintF("Aborting LChunk building in @\"%s\": ", *name);
     va_list arguments;
     va_start(arguments, format);
=======================================
--- /branches/bleeding_edge/src/arm/lithium-codegen-arm.cc Fri Sep 9 02:35:57 2011 +++ /branches/bleeding_edge/src/arm/lithium-codegen-arm.cc Fri Sep 9 15:39:47 2011
@@ -101,7 +101,8 @@

 void LCodeGen::Abort(const char* format, ...) {
   if (FLAG_trace_bailout) {
- SmartPointer<char> name(info()->shared_info()->DebugName()->ToCString());
+    SmartArrayPointer<char> name(
+        info()->shared_info()->DebugName()->ToCString());
     PrintF("Aborting LCodeGen in @\"%s\": ", *name);
     va_list arguments;
     va_start(arguments, format);
=======================================
--- /branches/bleeding_edge/src/ast.cc  Thu Sep  8 01:59:14 2011
+++ /branches/bleeding_edge/src/ast.cc  Fri Sep  9 15:39:47 2011
@@ -969,7 +969,7 @@
  public:
   RegExpUnparser();
   void VisitCharacterRange(CharacterRange that);
-  SmartPointer<const char> ToString() { return stream_.ToCString(); }
+  SmartArrayPointer<const char> ToString() { return stream_.ToCString(); }
#define MAKE_CASE(Name) virtual void* Visit##Name(RegExp##Name*, void* data);
   FOR_EACH_REG_EXP_TREE_TYPE(MAKE_CASE)
 #undef MAKE_CASE
@@ -1124,7 +1124,7 @@
 }


-SmartPointer<const char> RegExpTree::ToString() {
+SmartArrayPointer<const char> RegExpTree::ToString() {
   RegExpUnparser unparser;
   Accept(&unparser, NULL);
   return unparser.ToString();
=======================================
--- /branches/bleeding_edge/src/ast.h   Thu Sep  8 01:59:14 2011
+++ /branches/bleeding_edge/src/ast.h   Fri Sep  9 15:39:47 2011
@@ -1775,7 +1775,7 @@
   // expression.
   virtual Interval CaptureRegisters() { return Interval::Empty(); }
   virtual void AppendToText(RegExpText* text);
-  SmartPointer<const char> ToString();
+  SmartArrayPointer<const char> ToString();
#define MAKE_ASTYPE(Name) \ virtual RegExp##Name* As##Name(); \
   virtual bool Is##Name();
=======================================
--- /branches/bleeding_edge/src/code-stubs.cc   Fri Sep  9 02:35:57 2011
+++ /branches/bleeding_edge/src/code-stubs.cc   Fri Sep  9 15:39:47 2011
@@ -61,7 +61,7 @@
 }


-SmartPointer<const char> CodeStub::GetName() {
+SmartArrayPointer<const char> CodeStub::GetName() {
   char buffer[100];
   NoAllocationStringAllocator allocator(buffer,
static_cast<unsigned>(sizeof(buffer)));
@@ -75,7 +75,7 @@
   code->set_major_key(MajorKey());

   Isolate* isolate = masm->isolate();
-  SmartPointer<const char> name = GetName();
+  SmartArrayPointer<const char> name = GetName();
   PROFILE(isolate, CodeCreateEvent(Logger::STUB_TAG, code, *name));
   GDBJIT(AddCode(GDBJITInterface::STUB, *name, code));
   Counters* counters = isolate->counters();
=======================================
--- /branches/bleeding_edge/src/code-stubs.h    Fri Sep  9 02:35:57 2011
+++ /branches/bleeding_edge/src/code-stubs.h    Fri Sep  9 15:39:47 2011
@@ -181,7 +181,7 @@
   }

   // Returns a name for logging/debugging purposes.
-  SmartPointer<const char> GetName();
+  SmartArrayPointer<const char> GetName();
   virtual void PrintName(StringStream* stream) {
     stream->Add("%s", MajorName(MajorKey(), false));
   }
=======================================
--- /branches/bleeding_edge/src/d8-debug.cc     Fri Jun 24 13:04:32 2011
+++ /branches/bleeding_edge/src/d8-debug.cc     Fri Sep  9 15:39:47 2011
@@ -221,14 +221,14 @@
 }


-void RemoteDebugger::MessageReceived(i::SmartPointer<char> message) {
+void RemoteDebugger::MessageReceived(i::SmartArrayPointer<char> message) {
   RemoteDebuggerEvent* event =
       new RemoteDebuggerEvent(RemoteDebuggerEvent::kMessage, message);
   AddEvent(event);
 }


-void RemoteDebugger::KeyboardCommand(i::SmartPointer<char> command) {
+void RemoteDebugger::KeyboardCommand(i::SmartArrayPointer<char> command) {
   RemoteDebuggerEvent* event =
       new RemoteDebuggerEvent(RemoteDebuggerEvent::kKeyboard, command);
   AddEvent(event);
@@ -238,7 +238,7 @@
 void RemoteDebugger::ConnectionClosed() {
   RemoteDebuggerEvent* event =
       new RemoteDebuggerEvent(RemoteDebuggerEvent::kDisconnect,
-                              i::SmartPointer<char>());
+                              i::SmartArrayPointer<char>());
   AddEvent(event);
 }

@@ -330,14 +330,14 @@

 void ReceiverThread::Run() {
   // Receive the connect message (with empty body).
-  i::SmartPointer<char> message =
-    i::DebuggerAgentUtil::ReceiveMessage(remote_debugger_->conn());
+  i::SmartArrayPointer<char> message =
+      i::DebuggerAgentUtil::ReceiveMessage(remote_debugger_->conn());
   ASSERT(*message == NULL);

   while (true) {
     // Receive a message.
-    i::SmartPointer<char> message =
-      i::DebuggerAgentUtil::ReceiveMessage(remote_debugger_->conn());
+    i::SmartArrayPointer<char> message =
+        i::DebuggerAgentUtil::ReceiveMessage(remote_debugger_->conn());
     if (*message == NULL) {
       remote_debugger_->ConnectionClosed();
       return;
@@ -361,7 +361,7 @@

     // Pass the keyboard command to the main thread.
     remote_debugger_->KeyboardCommand(
-        i::SmartPointer<char>(i::StrDup(command)));
+        i::SmartArrayPointer<char>(i::StrDup(command)));
   }
 }

=======================================
--- /branches/bleeding_edge/src/d8-debug.h      Fri Jun 10 05:41:43 2011
+++ /branches/bleeding_edge/src/d8-debug.h      Fri Sep  9 15:39:47 2011
@@ -61,8 +61,8 @@
   void Run();

   // Handle events from the subordinate threads.
-  void MessageReceived(i::SmartPointer<char> message);
-  void KeyboardCommand(i::SmartPointer<char> command);
+  void MessageReceived(i::SmartArrayPointer<char> message);
+  void KeyboardCommand(i::SmartArrayPointer<char> command);
   void ConnectionClosed();

  private:
@@ -127,7 +127,7 @@
 // Events processed by the main deubgger thread.
 class RemoteDebuggerEvent {
  public:
-  RemoteDebuggerEvent(int type, i::SmartPointer<char> data)
+  RemoteDebuggerEvent(int type, i::SmartArrayPointer<char> data)
       : type_(type), data_(data), next_(NULL) {
     ASSERT(type == kMessage || type == kKeyboard || type == kDisconnect);
   }
@@ -144,7 +144,7 @@
   RemoteDebuggerEvent* next() { return next_; }

   int type_;
-  i::SmartPointer<char> data_;
+  i::SmartArrayPointer<char> data_;
   RemoteDebuggerEvent* next_;

   friend class RemoteDebugger;
=======================================
--- /branches/bleeding_edge/src/d8-readline.cc  Tue Apr 26 06:26:05 2011
+++ /branches/bleeding_edge/src/d8-readline.cc  Fri Sep  9 15:39:47 2011
@@ -49,7 +49,7 @@
 class ReadLineEditor: public LineEditor {
  public:
   ReadLineEditor() : LineEditor(LineEditor::READLINE, "readline") { }
-  virtual i::SmartPointer<char> Prompt(const char* prompt);
+  virtual i::SmartArrayPointer<char> Prompt(const char* prompt);
   virtual bool Open();
   virtual bool Close();
   virtual void AddHistory(const char* str);
@@ -81,9 +81,9 @@
 }


-i::SmartPointer<char> ReadLineEditor::Prompt(const char* prompt) {
+i::SmartArrayPointer<char> ReadLineEditor::Prompt(const char* prompt) {
   char* result = readline(prompt);
-  return i::SmartPointer<char>(result);
+  return i::SmartArrayPointer<char>(result);
 }


@@ -105,7 +105,7 @@
   static unsigned current_index;
   static Persistent<Array> current_completions;
   if (state == 0) {
-    i::SmartPointer<char> full_text(i::StrNDup(rl_line_buffer, rl_point));
+ i::SmartArrayPointer<char> full_text(i::StrNDup(rl_line_buffer, rl_point));
     HandleScope scope;
     Handle<Array> completions =
       Shell::GetCompletions(String::New(text), String::New(*full_text));
=======================================
--- /branches/bleeding_edge/src/d8.cc   Fri Sep  9 04:10:36 2011
+++ /branches/bleeding_edge/src/d8.cc   Fri Sep  9 15:39:47 2011
@@ -95,19 +95,19 @@
 class DumbLineEditor: public LineEditor {
  public:
   DumbLineEditor() : LineEditor(LineEditor::DUMB, "dumb") { }
-  virtual i::SmartPointer<char> Prompt(const char* prompt);
+  virtual i::SmartArrayPointer<char> Prompt(const char* prompt);
 };


 static DumbLineEditor dumb_line_editor;


-i::SmartPointer<char> DumbLineEditor::Prompt(const char* prompt) {
+i::SmartArrayPointer<char> DumbLineEditor::Prompt(const char* prompt) {
   static const int kBufferSize = 256;
   char buffer[kBufferSize];
   printf("%s", prompt);
   char* str = fgets(buffer, kBufferSize, stdin);
-  return i::SmartPointer<char>(str ? i::StrDup(str) : str);
+  return i::SmartArrayPointer<char>(str ? i::StrDup(str) : str);
 }


@@ -891,7 +891,7 @@
   }
   editor->Open();
   while (true) {
-    i::SmartPointer<char> input = editor->Prompt(Shell::kPrompt);
+    i::SmartArrayPointer<char> input = editor->Prompt(Shell::kPrompt);
     if (input.is_empty()) break;
     editor->AddHistory(*input);
     HandleScope inner_scope;
=======================================
--- /branches/bleeding_edge/src/d8.h    Thu Sep  8 15:44:03 2011
+++ /branches/bleeding_edge/src/d8.h    Fri Sep  9 15:39:47 2011
@@ -31,6 +31,7 @@
 #ifndef V8_SHARED
 #include "allocation.h"
 #include "hashmap.h"
+#include "smart-array-pointer.h"
 #include "v8.h"
 #else
 #include "../include/v8.h"
@@ -339,7 +340,7 @@
   LineEditor(Type type, const char* name);
   virtual ~LineEditor() { }

-  virtual i::SmartPointer<char> Prompt(const char* prompt) = 0;
+  virtual i::SmartArrayPointer<char> Prompt(const char* prompt) = 0;
   virtual bool Open() { return true; }
   virtual bool Close() { return true; }
   virtual void AddHistory(const char* str) { }
=======================================
--- /branches/bleeding_edge/src/debug-agent.cc  Fri Jun 10 02:54:04 2011
+++ /branches/bleeding_edge/src/debug-agent.cc  Fri Sep  9 15:39:47 2011
@@ -169,7 +169,8 @@

   while (true) {
     // Read data from the debugger front end.
- SmartPointer<char> message = DebuggerAgentUtil::ReceiveMessage(client_);
+    SmartArrayPointer<char> message =
+        DebuggerAgentUtil::ReceiveMessage(client_);

     const char* msg = *message;
     bool is_closing_session = (msg == NULL);
@@ -232,7 +233,7 @@
     StrLength(kContentLength);


-SmartPointer<char> DebuggerAgentUtil::ReceiveMessage(const Socket* conn) {
+SmartArrayPointer<char> DebuggerAgentUtil::ReceiveMessage(const Socket* conn) {
   int received;

   // Read header.
@@ -250,7 +251,7 @@
       received = conn->Receive(&c, 1);
       if (received <= 0) {
         PrintF("Error %d\n", Socket::LastError());
-        return SmartPointer<char>();
+        return SmartArrayPointer<char>();
       }

       // Add character to header buffer.
@@ -287,12 +288,12 @@
     if (strcmp(key, kContentLength) == 0) {
// Get the content length value if present and within a sensible range.
       if (value == NULL || strlen(value) > 7) {
-        return SmartPointer<char>();
+        return SmartArrayPointer<char>();
       }
       for (int i = 0; value[i] != '\0'; i++) {
         // Bail out if illegal data.
         if (value[i] < '0' || value[i] > '9') {
-          return SmartPointer<char>();
+          return SmartArrayPointer<char>();
         }
         content_length = 10 * content_length + (value[i] - '0');
       }
@@ -304,7 +305,7 @@

   // Return now if no body.
   if (content_length == 0) {
-    return SmartPointer<char>();
+    return SmartArrayPointer<char>();
   }

   // Read body.
@@ -312,11 +313,11 @@
   received = ReceiveAll(conn, buffer, content_length);
   if (received < content_length) {
     PrintF("Error %d\n", Socket::LastError());
-    return SmartPointer<char>();
+    return SmartArrayPointer<char>();
   }
   buffer[content_length] = '\0';

-  return SmartPointer<char>(buffer);
+  return SmartArrayPointer<char>(buffer);
 }


=======================================
--- /branches/bleeding_edge/src/debug-agent.h   Fri Jun 10 02:54:04 2011
+++ /branches/bleeding_edge/src/debug-agent.h   Fri Sep  9 15:39:47 2011
@@ -72,7 +72,7 @@
   void OnSessionClosed(DebuggerAgentSession* session);

   Isolate* isolate_;
-  SmartPointer<const char> name_;  // Name of the embedding application.
+ SmartArrayPointer<const char> name_; // Name of the embedding application.
   int port_;  // Port to use for the agent.
   Socket* server_;  // Server socket for listen/accept.
   bool terminate_;  // Termination flag.
@@ -117,7 +117,7 @@
   static const char* const kContentLength;
   static const int kContentLengthSize;

-  static SmartPointer<char> ReceiveMessage(const Socket* conn);
+  static SmartArrayPointer<char> ReceiveMessage(const Socket* conn);
   static bool SendConnectMessage(const Socket* conn,
                                  const char* embedding_host);
static bool SendMessage(const Socket* conn, const Vector<uint16_t> message);
=======================================
--- /branches/bleeding_edge/src/disassembler.cc Thu Aug 11 06:59:29 2011
+++ /branches/bleeding_edge/src/disassembler.cc Fri Sep  9 15:39:47 2011
@@ -223,7 +223,7 @@
         HeapStringAllocator allocator;
         StringStream accumulator(&allocator);
         relocinfo.target_object()->ShortPrint(&accumulator);
-        SmartPointer<const char> obj_name = accumulator.ToCString();
+        SmartArrayPointer<const char> obj_name = accumulator.ToCString();
         out.AddFormatted("    ;; object: %s", *obj_name);
       } else if (rmode == RelocInfo::EXTERNAL_REFERENCE) {
         const char* reference_name =
=======================================
--- /branches/bleeding_edge/src/flags.cc        Tue Dec  7 03:31:57 2010
+++ /branches/bleeding_edge/src/flags.cc        Fri Sep  9 15:39:47 2011
@@ -31,7 +31,7 @@
 #include "v8.h"

 #include "platform.h"
-#include "smart-pointer.h"
+#include "smart-array-pointer.h"
 #include "string-stream.h"


@@ -193,7 +193,7 @@
 }


-static SmartPointer<const char> ToString(Flag* flag) {
+static SmartArrayPointer<const char> ToString(Flag* flag) {
   HeapStringAllocator string_allocator;
   StringStream buffer(&string_allocator);
   switch (flag->type()) {
@@ -528,7 +528,7 @@
   printf("Options:\n");
   for (size_t i = 0; i < num_flags; ++i) {
     Flag* f = &flags[i];
-    SmartPointer<const char> value = ToString(f);
+    SmartArrayPointer<const char> value = ToString(f);
     printf("  --%s (%s)\n        type: %s  default: %s\n",
            f->name(), f->comment(), Type2String(f->type()), *value);
   }
=======================================
--- /branches/bleeding_edge/src/gdb-jit.cc      Thu Jun 30 05:19:47 2011
+++ /branches/bleeding_edge/src/gdb-jit.cc      Fri Sep  9 15:39:47 2011
@@ -993,7 +993,7 @@
   }
 #endif

-  SmartPointer<char> GetFilename() {
+  SmartArrayPointer<char> GetFilename() {
     return String::cast(script_->name())->ToCString();
   }

@@ -1991,7 +1991,7 @@
   GetScriptLineNumber(script, 0);

   if (!name.is_null()) {
-    SmartPointer<char> name_cstring = name->ToCString(DISALLOW_NULLS);
+    SmartArrayPointer<char> name_cstring = name->ToCString(DISALLOW_NULLS);
AddCode(*name_cstring, *code, GDBJITInterface::FUNCTION, *script, info);
   } else {
     AddCode("", *code, GDBJITInterface::FUNCTION, *script, info);
=======================================
--- /branches/bleeding_edge/src/hydrogen-instructions.cc Fri Sep 9 02:35:57 2011 +++ /branches/bleeding_edge/src/hydrogen-instructions.cc Fri Sep 9 15:39:47 2011
@@ -1133,7 +1133,7 @@


 void HEnterInlined::PrintDataTo(StringStream* stream) {
-  SmartPointer<char> name = function()->debug_name()->ToCString();
+  SmartArrayPointer<char> name = function()->debug_name()->ToCString();
   stream->Add("%s, id=%d", *name, function()->id());
 }

=======================================
--- /branches/bleeding_edge/src/hydrogen.cc     Fri Sep  9 06:12:52 2011
+++ /branches/bleeding_edge/src/hydrogen.cc     Fri Sep  9 15:39:47 2011
@@ -2200,7 +2200,8 @@

 void HGraphBuilder::Bailout(const char* reason) {
   if (FLAG_trace_bailout) {
- SmartPointer<char> name(info()->shared_info()->DebugName()->ToCString());
+    SmartArrayPointer<char> name(
+        info()->shared_info()->DebugName()->ToCString());
     PrintF("Bailout in HGraphBuilder: @\"%s\": %s\n", *name, reason);
   }
   SetStackOverflow();
@@ -4430,8 +4431,10 @@
                                 Handle<JSFunction> caller,
                                 const char* reason) {
   if (FLAG_trace_inlining) {
- SmartPointer<char> target_name = target->shared()->DebugName()->ToCString(); - SmartPointer<char> caller_name = caller->shared()->DebugName()->ToCString();
+    SmartArrayPointer<char> target_name =
+        target->shared()->DebugName()->ToCString();
+    SmartArrayPointer<char> caller_name =
+        caller->shared()->DebugName()->ToCString();
     if (reason == NULL) {
       PrintF("Inlined %s called from %s.\n", *target_name, *caller_name);
     } else {
=======================================
--- /branches/bleeding_edge/src/ia32/lithium-codegen-ia32.cc Fri Sep 9 02:35:57 2011 +++ /branches/bleeding_edge/src/ia32/lithium-codegen-ia32.cc Fri Sep 9 15:39:47 2011
@@ -88,7 +88,8 @@

 void LCodeGen::Abort(const char* format, ...) {
   if (FLAG_trace_bailout) {
- SmartPointer<char> name(info()->shared_info()->DebugName()->ToCString());
+    SmartArrayPointer<char> name(
+        info()->shared_info()->DebugName()->ToCString());
     PrintF("Aborting LCodeGen in @\"%s\": ", *name);
     va_list arguments;
     va_start(arguments, format);
=======================================
--- /branches/bleeding_edge/src/ia32/lithium-ia32.cc Fri Sep 9 02:35:57 2011 +++ /branches/bleeding_edge/src/ia32/lithium-ia32.cc Fri Sep 9 15:39:47 2011
@@ -315,13 +315,13 @@


 void LCallNamed::PrintDataTo(StringStream* stream) {
-  SmartPointer<char> name_string = name()->ToCString();
+  SmartArrayPointer<char> name_string = name()->ToCString();
   stream->Add("%s #%d / ", *name_string, arity());
 }


 void LCallGlobal::PrintDataTo(StringStream* stream) {
-  SmartPointer<char> name_string = name()->ToCString();
+  SmartArrayPointer<char> name_string = name()->ToCString();
   stream->Add("%s #%d / ", *name_string, arity());
 }

@@ -540,7 +540,8 @@

 void LChunkBuilder::Abort(const char* format, ...) {
   if (FLAG_trace_bailout) {
- SmartPointer<char> name(info()->shared_info()->DebugName()->ToCString());
+    SmartArrayPointer<char> name(
+        info()->shared_info()->DebugName()->ToCString());
     PrintF("Aborting LChunk building in @\"%s\": ", *name);
     va_list arguments;
     va_start(arguments, format);
=======================================
--- /branches/bleeding_edge/src/liveobjectlist.cc       Tue Aug 16 04:47:06 2011
+++ /branches/bleeding_edge/src/liveobjectlist.cc       Fri Sep  9 15:39:47 2011
@@ -184,7 +184,7 @@
 const AllocationSpace kInvalidSpace = static_cast<AllocationSpace>(-1);

 static AllocationSpace FindSpaceFor(String* space_str) {
-  SmartPointer<char> s =
+  SmartArrayPointer<char> s =
       space_str->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL);

   const char* key_str = *s;
@@ -236,7 +236,7 @@


 static LiveObjectType FindTypeFor(String* type_str) {
-  SmartPointer<char> s =
+  SmartArrayPointer<char> s =
       type_str->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL);

 #define CHECK_OBJECT_TYPE(type_, name) { \
@@ -503,10 +503,10 @@
     // We'll only dump 80 of them after we compact them.
     const int kMaxCharToDump = 80;
     const int kMaxBufferSize = kMaxCharToDump * 2;
-    SmartPointer<char> str_sp = str->ToCString(DISALLOW_NULLS,
-                                               ROBUST_STRING_TRAVERSAL,
-                                               0,
-                                               kMaxBufferSize);
+    SmartArrayPointer<char> str_sp = str->ToCString(DISALLOW_NULLS,
+ ROBUST_STRING_TRAVERSAL,
+                                                    0,
+                                                    kMaxBufferSize);
     char* str_cstr = *str_sp;
     int length = CompactString(str_cstr);
     OS::SNPrintF(buffer_v,
@@ -526,14 +526,14 @@
     }

     String* name = sinfo->DebugName();
-    SmartPointer<char> name_sp =
+    SmartArrayPointer<char> name_sp =
         name->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL);
     char* name_cstr = *name_sp;

     HeapStringAllocator string_allocator;
     StringStream stream(&string_allocator);
     sinfo->SourceCodePrint(&stream, 50);
-    SmartPointer<const char> source_sp = stream.ToCString();
+    SmartArrayPointer<const char> source_sp = stream.ToCString();
     const char* source_cstr = *source_sp;

     OS::SNPrintF(buffer_v,
@@ -1656,7 +1656,7 @@

 // Gets the obj id for the specified address if valid.
 Object* LiveObjectList::GetObjId(Handle<String> address) {
-  SmartPointer<char> addr_str =
+  SmartArrayPointer<char> addr_str =
       address->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL);

   Isolate* isolate = Isolate::Current();
=======================================
--- /branches/bleeding_edge/src/log-utils.cc    Fri Aug  5 04:32:46 2011
+++ /branches/bleeding_edge/src/log-utils.cc    Fri Sep  9 15:39:47 2011
@@ -125,7 +125,7 @@
             stream.Put(*p);
           }
         }
-        SmartPointer<const char> expanded = stream.ToCString();
+        SmartArrayPointer<const char> expanded = stream.ToCString();
         OpenFile(*expanded);
       } else {
         OpenFile(FLAG_logfile);
=======================================
--- /branches/bleeding_edge/src/log.cc  Thu Jul 21 06:51:04 2011
+++ /branches/bleeding_edge/src/log.cc  Fri Sep  9 15:39:47 2011
@@ -617,7 +617,7 @@
 void Logger::ApiNamedSecurityCheck(Object* key) {
   if (!log_->IsEnabled() || !FLAG_log_api) return;
   if (key->IsString()) {
-    SmartPointer<char> str =
+    SmartArrayPointer<char> str =
String::cast(key)->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL);
     ApiEvent("api,check-security,\"%s\"\n", *str);
   } else if (key->IsUndefined()) {
@@ -762,9 +762,9 @@
   ASSERT(name->IsString());
   if (!log_->IsEnabled() || !FLAG_log_api) return;
   String* class_name_obj = holder->class_name();
-  SmartPointer<char> class_name =
+  SmartArrayPointer<char> class_name =
       class_name_obj->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL);
-  SmartPointer<char> property_name =
+  SmartArrayPointer<char> property_name =
String::cast(name)->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL);
   ApiEvent("api,%s,\"%s\",\"%s\"\n", tag, *class_name, *property_name);
 }
@@ -774,7 +774,7 @@
                                       uint32_t index) {
   if (!log_->IsEnabled() || !FLAG_log_api) return;
   String* class_name_obj = holder->class_name();
-  SmartPointer<char> class_name =
+  SmartArrayPointer<char> class_name =
       class_name_obj->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL);
   ApiEvent("api,%s,\"%s\",%u\n", tag, *class_name, index);
 }
@@ -782,7 +782,7 @@
 void Logger::ApiObjectAccess(const char* tag, JSObject* object) {
   if (!log_->IsEnabled() || !FLAG_log_api) return;
   String* class_name_obj = object->class_name();
-  SmartPointer<char> class_name =
+  SmartArrayPointer<char> class_name =
       class_name_obj->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL);
   ApiEvent("api,%s,\"%s\"\n", tag, *class_name);
 }
@@ -836,7 +836,7 @@

 void Logger::CallbackEvent(String* name, Address entry_point) {
   if (!log_->IsEnabled() || !FLAG_log_code) return;
-  SmartPointer<char> str =
+  SmartArrayPointer<char> str =
       name->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL);
   CallbackEventInternal("", *str, entry_point);
 }
@@ -844,7 +844,7 @@

 void Logger::GetterCallbackEvent(String* name, Address entry_point) {
   if (!log_->IsEnabled() || !FLAG_log_code) return;
-  SmartPointer<char> str =
+  SmartArrayPointer<char> str =
       name->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL);
   CallbackEventInternal("get ", *str, entry_point);
 }
@@ -852,7 +852,7 @@

 void Logger::SetterCallbackEvent(String* name, Address entry_point) {
   if (!log_->IsEnabled() || !FLAG_log_code) return;
-  SmartPointer<char> str =
+  SmartArrayPointer<char> str =
       name->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL);
   CallbackEventInternal("set ", *str, entry_point);
 }
@@ -957,7 +957,7 @@
     return;

   LogMessageBuilder msg(this);
-  SmartPointer<char> str =
+  SmartArrayPointer<char> str =
       name->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL);
   msg.Append("%s,%s,",
              kLogEventsNames[CODE_CREATION_EVENT],
@@ -998,9 +998,9 @@
   }
   if (!FLAG_log_code) return;
   LogMessageBuilder msg(this);
-  SmartPointer<char> name =
+  SmartArrayPointer<char> name =
shared->DebugName()->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL);
-  SmartPointer<char> sourcestr =
+  SmartArrayPointer<char> sourcestr =
       source->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL);
   msg.Append("%s,%s,",
              kLogEventsNames[CODE_CREATION_EVENT],
=======================================
--- /branches/bleeding_edge/src/messages.cc     Thu May 19 04:47:34 2011
+++ /branches/bleeding_edge/src/messages.cc     Fri Sep  9 15:39:47 2011
@@ -41,13 +41,13 @@
 // by default.
 void MessageHandler::DefaultMessageReport(const MessageLocation* loc,
                                           Handle<Object> message_obj) {
-  SmartPointer<char> str = GetLocalizedMessage(message_obj);
+  SmartArrayPointer<char> str = GetLocalizedMessage(message_obj);
   if (loc == NULL) {
     PrintF("%s\n", *str);
   } else {
     HandleScope scope;
     Handle<Object> data(loc->script()->name());
-    SmartPointer<char> data_str;
+    SmartArrayPointer<char> data_str;
     if (data->IsString())
       data_str = Handle<String>::cast(data)->ToCString(DISALLOW_NULLS);
     PrintF("%s:%i: %s\n", *data_str ? *data_str : "<unknown>",
@@ -170,7 +170,8 @@
 }


-SmartPointer<char> MessageHandler::GetLocalizedMessage(Handle<Object> data) {
+SmartArrayPointer<char> MessageHandler::GetLocalizedMessage(
+    Handle<Object> data) {
   HandleScope scope;
   return GetMessage(data)->ToCString(DISALLOW_NULLS);
 }
=======================================
--- /branches/bleeding_edge/src/messages.h      Fri Apr  8 02:39:45 2011
+++ /branches/bleeding_edge/src/messages.h      Fri Sep  9 15:39:47 2011
@@ -105,7 +105,7 @@
   static void DefaultMessageReport(const MessageLocation* loc,
                                    Handle<Object> message_obj);
   static Handle<String> GetMessage(Handle<Object> data);
-  static SmartPointer<char> GetLocalizedMessage(Handle<Object> data);
+  static SmartArrayPointer<char> GetLocalizedMessage(Handle<Object> data);
 };

 } }  // namespace v8::internal
=======================================
--- /branches/bleeding_edge/src/objects.cc      Fri Sep  9 07:47:37 2011
+++ /branches/bleeding_edge/src/objects.cc      Fri Sep  9 15:39:47 2011
@@ -5057,13 +5057,13 @@
 }


-SmartPointer<char> String::ToCString(AllowNullsFlag allow_nulls,
-                                     RobustnessFlag robust_flag,
-                                     int offset,
-                                     int length,
-                                     int* length_return) {
+SmartArrayPointer<char> String::ToCString(AllowNullsFlag allow_nulls,
+                                          RobustnessFlag robust_flag,
+                                          int offset,
+                                          int length,
+                                          int* length_return) {
   if (robust_flag == ROBUST_STRING_TRAVERSAL && !LooksValid()) {
-    return SmartPointer<char>(NULL);
+    return SmartArrayPointer<char>(NULL);
   }
   Heap* heap = GetHeap();

@@ -5107,13 +5107,13 @@
     character_position++;
   }
   result[utf8_byte_position] = 0;
-  return SmartPointer<char>(result);
+  return SmartArrayPointer<char>(result);
 }


-SmartPointer<char> String::ToCString(AllowNullsFlag allow_nulls,
-                                     RobustnessFlag robust_flag,
-                                     int* length_return) {
+SmartArrayPointer<char> String::ToCString(AllowNullsFlag allow_nulls,
+                                          RobustnessFlag robust_flag,
+                                          int* length_return) {
   return ToCString(allow_nulls, robust_flag, 0, -1, length_return);
 }

@@ -5144,9 +5144,9 @@
 }


-SmartPointer<uc16> String::ToWideCString(RobustnessFlag robust_flag) {
+SmartArrayPointer<uc16> String::ToWideCString(RobustnessFlag robust_flag) {
   if (robust_flag == ROBUST_STRING_TRAVERSAL && !LooksValid()) {
-    return SmartPointer<uc16>();
+    return SmartArrayPointer<uc16>();
   }
   Heap* heap = GetHeap();

@@ -5162,7 +5162,7 @@
     result[i++] = character;
   }
   result[i] = 0;
-  return SmartPointer<uc16>(result);
+  return SmartArrayPointer<uc16>(result);
 }


@@ -6379,7 +6379,7 @@


 void JSFunction::PrintName(FILE* out) {
-  SmartPointer<char> name = shared()->DebugName()->ToCString();
+  SmartArrayPointer<char> name = shared()->DebugName()->ToCString();
   PrintF(out, "%s", *name);
 }

=======================================
--- /branches/bleeding_edge/src/objects.h       Fri Sep  9 07:47:37 2011
+++ /branches/bleeding_edge/src/objects.h       Fri Sep  9 15:39:47 2011
@@ -31,7 +31,7 @@
 #include "allocation.h"
 #include "builtins.h"
 #include "list.h"
-#include "smart-pointer.h"
+#include "smart-array-pointer.h"
 #include "unicode-inl.h"
 #if V8_TARGET_ARCH_ARM
 #include "arm/constants-arm.h"
@@ -5979,12 +5979,12 @@
// ROBUST_STRING_TRAVERSAL invokes behaviour that is robust This means it // handles unexpected data without causing assert failures and it does not
   // do any heap allocations.  This is useful when printing stack traces.
-  SmartPointer<char> ToCString(AllowNullsFlag allow_nulls,
-                               RobustnessFlag robustness_flag,
-                               int offset,
-                               int length,
-                               int* length_output = 0);
-  SmartPointer<char> ToCString(
+  SmartArrayPointer<char> ToCString(AllowNullsFlag allow_nulls,
+                                    RobustnessFlag robustness_flag,
+                                    int offset,
+                                    int length,
+                                    int* length_output = 0);
+  SmartArrayPointer<char> ToCString(
       AllowNullsFlag allow_nulls = DISALLOW_NULLS,
       RobustnessFlag robustness_flag = FAST_STRING_TRAVERSAL,
       int* length_output = 0);
@@ -5997,7 +5997,7 @@
// ROBUST_STRING_TRAVERSAL invokes behaviour that is robust This means it // handles unexpected data without causing assert failures and it does not
   // do any heap allocations.  This is useful when printing stack traces.
-  SmartPointer<uc16> ToWideCString(
+  SmartArrayPointer<uc16> ToWideCString(
       RobustnessFlag robustness_flag = FAST_STRING_TRAVERSAL);

   // Tells whether the hash code has been computed.
=======================================
--- /branches/bleeding_edge/src/parser.cc       Thu Sep  8 06:06:44 2011
+++ /branches/bleeding_edge/src/parser.cc       Fri Sep  9 15:39:47 2011
@@ -1369,7 +1369,7 @@
         if (harmony_block_scoping_) {
           // In harmony mode we treat re-declarations as early errors. See
           // ES5 16 for a definition of early errors.
-          SmartPointer<char> c_string = name->ToCString(DISALLOW_NULLS);
+ SmartArrayPointer<char> c_string = name->ToCString(DISALLOW_NULLS);
           const char* elms[2] = { "Variable", *c_string };
           Vector<const char*> args(elms, 2);
           ReportMessage("redeclaration", args);
@@ -1902,7 +1902,7 @@
     // structured.  However, these are probably changes we want to
     // make later anyway so we should go back and fix this then.
     if (ContainsLabel(labels, label) || TargetStackContainsLabel(label)) {
-      SmartPointer<char> c_string = label->ToCString(DISALLOW_NULLS);
+      SmartArrayPointer<char> c_string = label->ToCString(DISALLOW_NULLS);
       const char* elms[2] = { "Label", *c_string };
       Vector<const char*> args(elms, 2);
       ReportMessage("redeclaration", args);
@@ -3006,7 +3006,7 @@


 void Parser::ReportInvalidPreparseData(Handle<String> name, bool* ok) {
-  SmartPointer<char> name_string = name->ToCString(DISALLOW_NULLS);
+  SmartArrayPointer<char> name_string = name->ToCString(DISALLOW_NULLS);
   const char* element[1] = { *name_string };
   ReportMessage("invalid_preparser_data",
                 Vector<const char*>(element, 1));
@@ -4096,7 +4096,7 @@
     // In harmony mode we treat conflicting variable bindinds as early
     // errors. See ES5 16 for a definition of early errors.
     Handle<String> name = decl->proxy()->name();
-    SmartPointer<char> c_string = name->ToCString(DISALLOW_NULLS);
+    SmartArrayPointer<char> c_string = name->ToCString(DISALLOW_NULLS);
     const char* elms[2] = { "Variable", *c_string };
     Vector<const char*> args(elms, 2);
     int position = decl->proxy()->position();
=======================================
--- /branches/bleeding_edge/src/platform-win32.cc       Wed Sep  7 05:39:53 2011
+++ /branches/bleeding_edge/src/platform-win32.cc       Fri Sep  9 15:39:47 2011
@@ -1299,7 +1299,7 @@

     // Try to locate a symbol for this frame.
     DWORD64 symbol_displacement;
-    SmartPointer<IMAGEHLP_SYMBOL64> symbol(
+    SmartArrayPointer<IMAGEHLP_SYMBOL64> symbol(
         NewArray<IMAGEHLP_SYMBOL64>(kStackWalkMaxNameLen));
     if (symbol.is_empty()) return kStackWalkError;  // Out of memory.
     memset(*symbol, 0, sizeof(IMAGEHLP_SYMBOL64) + kStackWalkMaxNameLen);
=======================================
--- /branches/bleeding_edge/src/prettyprinter.cc        Thu Sep  8 01:59:14 2011
+++ /branches/bleeding_edge/src/prettyprinter.cc        Fri Sep  9 15:39:47 2011
@@ -1105,7 +1105,7 @@


 void JsonAstBuilder::AddAttribute(const char* name, Handle<String> value) {
-  SmartPointer<char> value_string = value->ToCString();
+  SmartArrayPointer<char> value_string = value->ToCString();
   AddAttributePrefix(name);
   Print("\"%s\"", *value_string);
 }
=======================================
--- /branches/bleeding_edge/src/runtime.cc      Fri Sep  9 07:47:37 2011
+++ /branches/bleeding_edge/src/runtime.cc      Fri Sep  9 15:39:47 2011
@@ -52,7 +52,7 @@
 #include "runtime-profiler.h"
 #include "runtime.h"
 #include "scopeinfo.h"
-#include "smart-pointer.h"
+#include "smart-array-pointer.h"
 #include "string-search.h"
 #include "stub-cache.h"
 #include "v8threads.h"
@@ -7908,8 +7908,8 @@
 }


-static SmartPointer<Object**> GetNonBoundArguments(int bound_argc,
-                                                   int* total_argc) {
+static SmartArrayPointer<Object**> GetNonBoundArguments(int bound_argc,
+                                                        int* total_argc) {
   // Find frame containing arguments passed to the caller.
   JavaScriptFrameIterator it;
   JavaScriptFrame* frame = it.frame();
@@ -7925,7 +7925,7 @@
                                             &args_slots);

     *total_argc = bound_argc + args_count;
-    SmartPointer<Object**> param_data(NewArray<Object**>(*total_argc));
+ SmartArrayPointer<Object**> param_data(NewArray<Object**>(*total_argc));
     for (int i = 0; i < args_count; i++) {
       Handle<Object> val = args_slots[i].GetValue();
       param_data[bound_argc + i] = val.location();
@@ -7937,7 +7937,7 @@
     int args_count = frame->ComputeParametersCount();

     *total_argc = bound_argc + args_count;
-    SmartPointer<Object**> param_data(NewArray<Object**>(*total_argc));
+ SmartArrayPointer<Object**> param_data(NewArray<Object**>(*total_argc));
     for (int i = 0; i < args_count; i++) {
       Handle<Object> val = Handle<Object>(frame->GetParameter(i));
       param_data[bound_argc + i] = val.location();
@@ -7964,7 +7964,7 @@
   }

   int total_argc = 0;
-  SmartPointer<Object**> param_data =
+  SmartArrayPointer<Object**> param_data =
       GetNonBoundArguments(bound_argc, &total_argc);
   for (int i = 0; i < bound_argc; i++) {
     Handle<Object> val = Handle<Object>(bound_args->get(i));
@@ -8883,7 +8883,7 @@
 static void PrintString(String* str) {
   // not uncommon to have empty strings
   if (str->length() > 0) {
-    SmartPointer<char> s =
+    SmartArrayPointer<char> s =
         str->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL);
     PrintF("%s", *s);
   }
@@ -12435,7 +12435,7 @@
 // Sets a v8 flag.
 RUNTIME_FUNCTION(MaybeObject*, Runtime_SetFlags) {
   CONVERT_CHECKED(String, arg, args[0]);
-  SmartPointer<char> flags =
+  SmartArrayPointer<char> flags =
       arg->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL);
   FlagList::SetFlagsFromString(*flags, StrLength(*flags));
   return isolate->heap()->undefined_value();
=======================================
--- /branches/bleeding_edge/src/scopes.cc       Wed Sep  7 04:02:31 2011
+++ /branches/bleeding_edge/src/scopes.cc       Fri Sep  9 15:39:47 2011
@@ -663,7 +663,7 @@


 static void PrintName(Handle<String> name) {
-  SmartPointer<char> s = name->ToCString(DISALLOW_NULLS);
+  SmartArrayPointer<char> s = name->ToCString(DISALLOW_NULLS);
   PrintF("%s", *s);
 }

=======================================
--- /branches/bleeding_edge/src/string-stream.cc        Tue Jul 12 01:03:19 2011
+++ /branches/bleeding_edge/src/string-stream.cc        Fri Sep  9 15:39:47 2011
@@ -252,11 +252,11 @@
 }


-SmartPointer<const char> StringStream::ToCString() const {
+SmartArrayPointer<const char> StringStream::ToCString() const {
   char* str = NewArray<char>(length_ + 1);
   memcpy(str, buffer_, length_);
   str[length_] = '\0';
-  return SmartPointer<const char>(str);
+  return SmartArrayPointer<const char>(str);
 }


=======================================
--- /branches/bleeding_edge/src/string-stream.h Thu Sep  8 12:57:14 2011
+++ /branches/bleeding_edge/src/string-stream.h Fri Sep  9 15:39:47 2011
@@ -143,7 +143,7 @@
   void OutputToStdOut() { OutputToFile(stdout); }
   void Log();
   Handle<String> ToString();
-  SmartPointer<const char> ToCString() const;
+  SmartArrayPointer<const char> ToCString() const;
   int length() const { return length_; }

   // Object printing support.
=======================================
--- /branches/bleeding_edge/src/x64/lithium-codegen-x64.cc Fri Sep 9 02:35:57 2011 +++ /branches/bleeding_edge/src/x64/lithium-codegen-x64.cc Fri Sep 9 15:39:47 2011
@@ -100,7 +100,8 @@

 void LCodeGen::Abort(const char* format, ...) {
   if (FLAG_trace_bailout) {
- SmartPointer<char> name(info()->shared_info()->DebugName()->ToCString());
+    SmartArrayPointer<char> name(
+        info()->shared_info()->DebugName()->ToCString());
     PrintF("Aborting LCodeGen in @\"%s\": ", *name);
     va_list arguments;
     va_start(arguments, format);
=======================================
--- /branches/bleeding_edge/src/x64/lithium-x64.cc      Fri Sep  9 02:35:57 2011
+++ /branches/bleeding_edge/src/x64/lithium-x64.cc      Fri Sep  9 15:39:47 2011
@@ -313,13 +313,13 @@


 void LCallNamed::PrintDataTo(StringStream* stream) {
-  SmartPointer<char> name_string = name()->ToCString();
+  SmartArrayPointer<char> name_string = name()->ToCString();
   stream->Add("%s #%d / ", *name_string, arity());
 }


 void LCallGlobal::PrintDataTo(StringStream* stream) {
-  SmartPointer<char> name_string = name()->ToCString();
+  SmartArrayPointer<char> name_string = name()->ToCString();
   stream->Add("%s #%d / ", *name_string, arity());
 }

@@ -539,7 +539,8 @@

 void LChunkBuilder::Abort(const char* format, ...) {
   if (FLAG_trace_bailout) {
- SmartPointer<char> name(info()->shared_info()->DebugName()->ToCString());
+    SmartArrayPointer<char> name(
+        info()->shared_info()->DebugName()->ToCString());
     PrintF("Aborting LChunk building in @\"%s\": ", *name);
     va_list arguments;
     va_start(arguments, format);
=======================================
--- /branches/bleeding_edge/test/cctest/test-debug.cc Thu Sep 8 12:57:14 2011 +++ /branches/bleeding_edge/test/cctest/test-debug.cc Fri Sep 9 15:39:47 2011
@@ -5917,7 +5917,7 @@

  private:
   int port_;
-  i::SmartPointer<char> body_;
+  i::SmartArrayPointer<char> body_;
   i::Socket* server_;  // Server socket used for bind/accept.
   i::Socket* client_;  // Single client connection used by the test.
i::Semaphore* listening_; // Signalled when the server is in listen mode.
=======================================
--- /branches/bleeding_edge/test/cctest/test-func-name-inference.cc Wed Jun 22 13:23:48 2011 +++ /branches/bleeding_edge/test/cctest/test-func-name-inference.cc Fri Sep 9 15:39:47 2011
@@ -41,7 +41,7 @@
 using ::v8::internal::Object;
 using ::v8::internal::Runtime;
 using ::v8::internal::Script;
-using ::v8::internal::SmartPointer;
+using ::v8::internal::SmartArrayPointer;
 using ::v8::internal::SharedFunctionInfo;
 using ::v8::internal::String;

@@ -96,7 +96,7 @@
       SharedFunctionInfo::cast(shared_func_info_ptr));

   // Verify inferred function name.
-  SmartPointer<char> inferred_name =
+  SmartArrayPointer<char> inferred_name =
       shared_func_info->inferred_name()->ToCString();
   CHECK_EQ(ref_inferred_name, *inferred_name);
 #endif  // ENABLE_DEBUGGER_SUPPORT
=======================================
--- /branches/bleeding_edge/test/cctest/test-heap-profiler.cc Tue Aug 23 05:24:54 2011 +++ /branches/bleeding_edge/test/cctest/test-heap-profiler.cc Fri Sep 9 15:39:47 2011
@@ -892,7 +892,7 @@


 static int StringCmp(const char* ref, i::String* act) {
-  i::SmartPointer<char> s_act = act->ToCString();
+  i::SmartArrayPointer<char> s_act = act->ToCString();
   int result = strcmp(ref, *s_act);
   if (result != 0)
     fprintf(stderr, "Expected: \"%s\", Actual: \"%s\"\n", ref, *s_act);
=======================================
--- /branches/bleeding_edge/test/cctest/test-parsing.cc Thu Sep 8 06:06:44 2011 +++ /branches/bleeding_edge/test/cctest/test-parsing.cc Fri Sep 9 15:39:47 2011
@@ -345,7 +345,7 @@
       reinterpret_cast<uintptr_t>(&marker) - 128 * 1024);

   size_t kProgramSize = 1024 * 1024;
-  i::SmartPointer<char> program(
+  i::SmartArrayPointer<char> program(
       reinterpret_cast<char*>(malloc(kProgramSize + 1)));
   memset(*program, '(', kProgramSize);
   program[kProgramSize] = '\0';
@@ -398,7 +398,7 @@
   if (end == 0) end = length;
   unsigned sub_length = end - start;
   i::HandleScope test_scope;
-  i::SmartPointer<i::uc16> uc16_buffer(new i::uc16[length]);
+  i::SmartArrayPointer<i::uc16> uc16_buffer(new i::uc16[length]);
   for (unsigned i = 0; i < length; i++) {
     uc16_buffer[i] = static_cast<i::uc16>(ascii_source[i]);
   }
=======================================
--- /branches/bleeding_edge/test/cctest/test-regexp.cc Mon Sep 5 00:39:47 2011 +++ /branches/bleeding_edge/test/cctest/test-regexp.cc Fri Sep 9 15:39:47 2011
@@ -79,7 +79,7 @@
 }


-static SmartPointer<const char> Parse(const char* input) {
+static SmartArrayPointer<const char> Parse(const char* input) {
   V8::Initialize(NULL);
   v8::HandleScope scope;
   ZoneScope zone_scope(Isolate::Current(), DELETE_ON_EXIT);
@@ -88,7 +88,7 @@
   CHECK(v8::internal::RegExpParser::ParseRegExp(&reader, false, &result));
   CHECK(result.tree != NULL);
   CHECK(result.error.is_null());
-  SmartPointer<const char> output = result.tree->ToString();
+  SmartArrayPointer<const char> output = result.tree->ToString();
   return output;
 }

@@ -391,7 +391,7 @@
   CHECK(!v8::internal::RegExpParser::ParseRegExp(&reader, false, &result));
   CHECK(result.tree == NULL);
   CHECK(!result.error.is_null());
-  SmartPointer<char> str = result.error->ToCString(ALLOW_NULLS);
+  SmartArrayPointer<char> str = result.error->ToCString(ALLOW_NULLS);
   CHECK_EQ(expected, *str);
 }

@@ -423,7 +423,7 @@
   for (int i = 0; i <= kMaxCaptures; i++) {
     accumulator.Add("()");
   }
-  SmartPointer<const char> many_captures(accumulator.ToCString());
+  SmartArrayPointer<const char> many_captures(accumulator.ToCString());
   ExpectError(*many_captures, kTooManyCaptures);
 }

=======================================
--- /branches/bleeding_edge/test/cctest/test-reloc-info.cc Tue Mar 22 04:51:16 2011 +++ /branches/bleeding_edge/test/cctest/test-reloc-info.cc Fri Sep 9 15:39:47 2011
@@ -45,7 +45,7 @@
   const int code_size = 10 * KB;
   int relocation_info_size = 10 * KB;
   const int buffer_size = code_size + relocation_info_size;
-  SmartPointer<byte> buffer(new byte[buffer_size]);
+  SmartArrayPointer<byte> buffer(new byte[buffer_size]);

   byte* pc = *buffer;
   byte* buffer_end = *buffer + buffer_size;
=======================================
--- /branches/bleeding_edge/tools/gyp/v8.gyp    Thu Sep  8 06:20:49 2011
+++ /branches/bleeding_edge/tools/gyp/v8.gyp    Fri Sep  9 15:39:47 2011
@@ -425,7 +425,7 @@
             '../../src/serialize.cc',
             '../../src/serialize.h',
             '../../src/small-pointer-list.h',
-            '../../src/smart-pointer.h',
+            '../../src/smart-array-pointer.h',
             '../../src/snapshot-common.cc',
             '../../src/snapshot.h',
             '../../src/spaces-inl.h',

--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev

Reply via email to