Fix registerExtension for NODE_MODULE_CONTEXTS
authorHerbert Vojčík <herby@mailbox.sk>
Tue, 17 Aug 2010 20:19:19 +0000 (22:19 +0200)
committerRyan Dahl <ry@tinyclouds.org>
Wed, 18 Aug 2010 18:46:37 +0000 (11:46 -0700)
Fix of registerExtension-produced non-string module loading with own
context. Plus finishing touches to the test.

src/node.js
test/simple/test-module-loading.js

index 2e79278..3561406 100644 (file)
@@ -394,6 +394,11 @@ var module = (function () {
       content = extensionCache[ext](content);
     }
 
+    if ("string" !== typeof content) {
+      self.exports = content;
+      return;
+    }
+
     function requireAsync (url, cb) {
       loadModule(url, self, cb);
     }
@@ -410,7 +415,7 @@ var module = (function () {
     var dirname = path.dirname(filename);
 
     if (contextLoad) {
-      if (!Script) Script = Script = process.binding('evals').Script;
+      if (!Script) Script = process.binding('evals').Script;
 
       if (self.id !== ".") {
         debug('load submodule');
@@ -441,20 +446,16 @@ var module = (function () {
       }
 
     } else {
-      if ('string' === typeof content) {
-        // create wrapper function
-        var wrapper = "(function (exports, require, module, __filename, __dirname) { "
-                    + content
-                    + "\n});";
-
-        var compiledWrapper = process.compile(wrapper, filename);
-        if (filename === process.argv[1] && global.v8debug) {
-          global.v8debug.Debug.setBreakPoint(compiledWrapper, 0, 0);
-        }
-        compiledWrapper.apply(self.exports, [self.exports, require, self, filename, dirname]);
-      } else {
-        self.exports = content;
+      // create wrapper function
+      var wrapper = "(function (exports, require, module, __filename, __dirname) { "
+                  + content
+                  + "\n});";
+
+      var compiledWrapper = process.compile(wrapper, filename);
+      if (filename === process.argv[1] && global.v8debug) {
+        global.v8debug.Debug.setBreakPoint(compiledWrapper, 0, 0);
       }
+      compiledWrapper.apply(self.exports, [self.exports, require, self, filename, dirname]);
     }
   };
 
index e66a0d8..d4ba5dc 100644 (file)
@@ -152,19 +152,19 @@ assert.equal(require(loadOrder + 'file8').file8, 'file8/index.reg',  msg);
 assert.equal(require(loadOrder + 'file9').file9, 'file9/index.reg2', msg);
 
 process.addListener("exit", function () {
-  assert.equal(true, a.A instanceof Function);
+  assert.ok(common.indirectInstanceOf(a.A, Function));
   assert.equal("A done", a.A());
 
-  assert.equal(true, a.C instanceof Function);
+  assert.ok(common.indirectInstanceOf(a.C, Function));
   assert.equal("C done", a.C());
 
-  assert.equal(true, a.D instanceof Function);
+  assert.ok(common.indirectInstanceOf(a.D, Function));
   assert.equal("D done", a.D());
 
-  assert.equal(true, d.D instanceof Function);
+  assert.ok(common.indirectInstanceOf(d.D, Function));
   assert.equal("D done", d.D());
 
-  assert.equal(true, d2.D instanceof Function);
+  assert.ok(common.indirectInstanceOf(d2.D, Function));
   assert.equal("D done", d2.D());
 
   assert.equal(true, errorThrown);