Expose the V8 debug object process.debug
authorRyan Dahl <ry@tinyclouds.org>
Mon, 2 Aug 2010 07:39:09 +0000 (00:39 -0700)
committerRyan Dahl <ry@tinyclouds.org>
Mon, 2 Aug 2010 07:46:09 +0000 (00:46 -0700)
Add one duplicate test from V8, just to make sure it works.

lib/module.js
src/node.cc
src/node.js
test/simple/test-liveedit.js [new file with mode: 0644]

index 72814a7..9b0c4b0 100644 (file)
@@ -420,8 +420,8 @@ Module.prototype._compile = function (content, filename) {
                   + "\n});";
 
       var compiledWrapper = process.compile(wrapper, filename);
-      if (filename === process.argv[1] && global.v8debug) {
-        global.v8debug.Debug.setBreakPoint(compiledWrapper, 0, 0);
+      if (filename === process.argv[1] && process._debugWaitConnect) {
+        process.debug.setBreakPoint(compiledWrapper, 0, 0);
       }
       compiledWrapper.apply(self.exports, [self.exports, require, self, filename, dirname]);
     } else {
index aae8a05..1523c09 100644 (file)
@@ -1631,6 +1631,9 @@ static void Load(int argc, char *argv[]) {
   // who do not like how 'src/node.js' setups the module system but do like
   // Node's I/O bindings may want to replace 'f' with their own function.
 
+  process->Set(String::NewSymbol("_debugWaitConnect"),
+               node::debug_wait_connect ? True() : False());
+
   Local<Value> args[1] = { Local<Value>::New(process) };
 
   f->Call(global, 1, args);
@@ -1741,16 +1744,15 @@ int main(int argc, char *argv[]) {
   int v8argc = node::option_end_index;
   char **v8argv = argv;
 
-  if (node::debug_wait_connect) {
-    // v8argv is a copy of argv up to the script file argument +2 if --debug-brk
-    // to expose the v8 debugger js object so that module.js can set
-    // a breakpoint on the first line of the startup script
-    v8argc += 2;
-    v8argv = new char*[v8argc];
-    memcpy(v8argv, argv, sizeof(argv) * node::option_end_index);
-    v8argv[node::option_end_index] = const_cast<char*>("--expose_debug_as");
-    v8argv[node::option_end_index + 1] = const_cast<char*>("v8debug");
-  }
+  // v8argv is a copy of argv up to the script file argument +2
+  // to expose the v8 debugger js object so that module.js can set
+  // a breakpoint on the first line of the startup script
+  v8argc += 2;
+  v8argv = new char*[v8argc];
+  memcpy(v8argv, argv, sizeof(argv) * node::option_end_index);
+  v8argv[node::option_end_index] = const_cast<char*>("--expose_debug_as");
+  v8argv[node::option_end_index + 1] = const_cast<char*>("v8debug");
+
   V8::SetFlagsFromCommandLine(&v8argc, v8argv, false);
 
   // Ignore SIGPIPE
index 70a2917..6d60113 100644 (file)
@@ -233,6 +233,9 @@ global.console.assert = function(expression){
 
 global.Buffer = module.requireNative('buffer').Buffer;
 
+process.debug = global.v8debug.Debug;
+global.v8debug = undefined;
+
 process.exit = function (code) {
   process.emit("exit");
   process.reallyExit(code);
diff --git a/test/simple/test-liveedit.js b/test/simple/test-liveedit.js
new file mode 100644 (file)
index 0000000..6ba422f
--- /dev/null
@@ -0,0 +1,27 @@
+common = require("../common");
+assert = require("assert");
+
+
+// This is a duplicate of deps/v8/test/mjsunit/debug-liveedit-1.js
+//  Just exercises the process.debug object.
+
+eval("var something1 = 25; "
+     + " function ChooseAnimal() { return          'Cat';          } "
+     + " ChooseAnimal.Helper = function() { return 'Help!'; }");
+
+assert.equal("Cat", ChooseAnimal());
+
+var script = process.debug.findScript(ChooseAnimal);
+
+var orig_animal = "Cat";
+var patch_pos = script.source.indexOf(orig_animal);
+var new_animal_patch = "Cap' + 'y' + 'bara";
+
+var change_log = new Array();
+process.debug.LiveEdit.TestApi.ApplySingleChunkPatch(script,
+                                                     patch_pos,
+                                                     orig_animal.length,
+                                                     new_animal_patch,
+                                                     change_log);
+
+assert.equal("Capybara", ChooseAnimal());