Merge r1718 to trunk.



Review URL: http://codereview.chromium.org/79019

git-svn-id: http://v8.googlecode.com/svn/trunk@1730 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
diff --git a/src/api.cc b/src/api.cc
index 9f3024e..650f166 100644
--- a/src/api.cc
+++ b/src/api.cc
@@ -2373,7 +2373,7 @@
 
 
 const char* v8::V8::GetVersion() {
-  return "1.1.10";
+  return "1.1.10.1";
 }
 
 
diff --git a/src/debug.cc b/src/debug.cc
index 1374c15..a4bb04d 100644
--- a/src/debug.cc
+++ b/src/debug.cc
@@ -1825,6 +1825,9 @@
         Debugger::host_dispatch_handler_(reinterpret_cast<void*>(dispatch),
                                          Debugger::host_dispatch_handler_data_);
       }
+      if (auto_continue && !HasCommands()) {
+        return;
+      }
       continue;
     }
 
@@ -2030,6 +2033,8 @@
   Logger::DebugTag("Put command on command_queue.");
   command_queue_.Put(command_copy);
   command_received_->Signal();
+
+  // Set the debug command break flag to have the command processed.
   if (!Debug::InDebugger()) {
     StackGuard::DebugCommand();
   }
@@ -2042,7 +2047,7 @@
 
 
 void Debugger::ProcessHostDispatch(void* dispatch) {
-// Puts a host dispatch comming from the public API on the queue.
+  // Puts a host dispatch comming from the public API on the queue.
   uint16_t hack[3];
   hack[0] = 0;
   hack[1] = reinterpret_cast<uint32_t>(dispatch) >> 16;
@@ -2050,6 +2055,11 @@
   Logger::DebugTag("Put dispatch on command_queue.");
   command_queue_.Put(Vector<uint16_t>(hack, 3).Clone());
   command_received_->Signal();
+
+  // Set the debug command break flag to have the host dispatch processed.
+  if (!Debug::InDebugger()) {
+    StackGuard::DebugCommand();
+  }
 }
 
 
diff --git a/test/cctest/test-debug.cc b/test/cctest/test-debug.cc
index 03ef70d..e482c7f 100644
--- a/test/cctest/test-debug.cc
+++ b/test/cctest/test-debug.cc
@@ -4025,19 +4025,33 @@
      "\"type\":\"request\","
      "\"command\":\"continue\"}";
 
+  // Create an empty function to call for processing debug commands
+  v8::Local<v8::Function> empty =
+      CompileFunction(&env, "function empty(){}", "empty");
+
   // Setup message and host dispatch handlers.
   v8::Debug::SetMessageHandler(DummyMessageHandler);
   v8::Debug::SetHostDispatchHandler(HostDispatchHandlerHitCount,
                                     NULL);
 
-  // Fill a host dispatch and a continue command on the command queue before
-  // running some code.
+  // Send a host dispatch by itself.
+  v8::Debug::SendHostDispatch(NULL);
+  empty->Call(env->Global(), 0, NULL);  // Run JavaScript to activate debugger.
+  CHECK_EQ(1, host_dispatch_hit_count);
+
+  // Fill a host dispatch and a continue command on the command queue.
   v8::Debug::SendHostDispatch(NULL);
   v8::Debug::SendCommand(buffer, AsciiToUtf16(command_continue, buffer));
-  CompileRun("void 0");
+  empty->Call(env->Global(), 0, NULL);  // Run JavaScript to activate debugger.
 
-  // The host dispatch callback should be called.
-  CHECK_EQ(1, host_dispatch_hit_count);
+  // Fill a continue command and a host dispatch on the command queue.
+  v8::Debug::SendCommand(buffer, AsciiToUtf16(command_continue, buffer));
+  v8::Debug::SendHostDispatch(NULL);
+  empty->Call(env->Global(), 0, NULL);  // Run JavaScript to activate debugger.
+  empty->Call(env->Global(), 0, NULL);  // Run JavaScript to activate debugger.
+
+  // All the host dispatch callback should be called.
+  CHECK_EQ(3, host_dispatch_hit_count);
 }