Browse Source

vm: refactor vm module

Switch to the more efficient module.exports = {} pattern.

PR-URL: https://github.com/nodejs/node/pull/11392
Reviewed-By: Michaël Zasso <targos@protonmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
v6
James M Snell 8 years ago
parent
commit
804bb22e3b
  1. 63
      lib/vm.js
  2. 14
      test/message/eval_messages.out
  3. 18
      test/message/stdin_messages.out
  4. 4
      test/message/undefined_reference_in_new_context.out
  5. 4
      test/message/vm_display_runtime_error.out
  6. 9
      test/message/vm_display_syntax_error.out
  7. 3
      test/message/vm_dont_display_runtime_error.out
  8. 5
      test/message/vm_dont_display_syntax_error.out

63
lib/vm.js

@ -34,17 +34,11 @@ Script.prototype.runInContext = function(contextifiedSandbox, options) {
};
Script.prototype.runInNewContext = function(sandbox, options) {
var context = exports.createContext(sandbox);
var context = createContext(sandbox);
return this.runInContext(context, options);
};
exports.Script = Script;
exports.createScript = function(code, options) {
return new Script(code, options);
};
exports.createContext = function(sandbox) {
function createContext(sandbox) {
if (sandbox === undefined) {
sandbox = {};
} else if (binding.isContext(sandbox)) {
@ -53,28 +47,11 @@ exports.createContext = function(sandbox) {
binding.makeContext(sandbox);
return sandbox;
};
exports.runInDebugContext = function(code) {
return binding.runInDebugContext(code);
};
exports.runInContext = function(code, contextifiedSandbox, options) {
var script = new Script(code, options);
return script.runInContext(contextifiedSandbox, options);
};
exports.runInNewContext = function(code, sandbox, options) {
var script = new Script(code, options);
return script.runInNewContext(sandbox, options);
};
exports.runInThisContext = function(code, options) {
var script = new Script(code, options);
return script.runInThisContext(options);
};
}
exports.isContext = binding.isContext;
function createScript(code, options) {
return new Script(code, options);
}
// Remove all SIGINT listeners and re-attach them after the wrapped function
// has executed, so that caught SIGINT are handled by the listeners again.
@ -100,3 +77,31 @@ function sigintHandlersWrap(fn, thisArg, argsArray) {
}
}
}
function runInDebugContext(code) {
return binding.runInDebugContext(code);
}
function runInContext(code, contextifiedSandbox, options) {
return createScript(code, options)
.runInContext(contextifiedSandbox, options);
}
function runInNewContext(code, sandbox, options) {
return createScript(code, options).runInNewContext(sandbox, options);
}
function runInThisContext(code, options) {
return createScript(code, options).runInThisContext(options);
}
module.exports = {
Script,
createContext,
createScript,
runInDebugContext,
runInContext,
runInNewContext,
runInThisContext,
isContext: binding.isContext
};

14
test/message/eval_messages.out

@ -3,7 +3,8 @@
with(this){__filename}
^^^^
SyntaxError: Strict mode code may not include a with statement
at Object.exports.runInThisContext (vm.js:*)
at createScript (vm.js:*)
at Object.runInThisContext (vm.js:*)
at Object.<anonymous> ([eval]-wrapper:*:*)
at Module._compile (module.js:*:*)
at Immediate.<anonymous> (bootstrap_node.js:*:*)
@ -15,10 +16,11 @@ SyntaxError: Strict mode code may not include a with statement
[eval]:1
throw new Error("hello")
^
Error: hello
at [eval]:1:7
at ContextifyScript.Script.runInThisContext (vm.js:*)
at Object.exports.runInThisContext (vm.js:*)
at Object.runInThisContext (vm.js:*)
at Object.<anonymous> ([eval]-wrapper:*:*)
at Module._compile (module.js:*:*)
at Immediate.<anonymous> (bootstrap_node.js:*:*)
@ -28,10 +30,11 @@ Error: hello
[eval]:1
throw new Error("hello")
^
Error: hello
at [eval]:1:7
at ContextifyScript.Script.runInThisContext (vm.js:*)
at Object.exports.runInThisContext (vm.js:*)
at Object.runInThisContext (vm.js:*)
at Object.<anonymous> ([eval]-wrapper:*:*)
at Module._compile (module.js:*:*)
at Immediate.<anonymous> (bootstrap_node.js:*:*)
@ -42,20 +45,23 @@ Error: hello
[eval]:1
var x = 100; y = x;
^
ReferenceError: y is not defined
at [eval]:1:16
at ContextifyScript.Script.runInThisContext (vm.js:*)
at Object.exports.runInThisContext (vm.js:*)
at Object.runInThisContext (vm.js:*)
at Object.<anonymous> ([eval]-wrapper:*:*)
at Module._compile (module.js:*:*)
at Immediate.<anonymous> (bootstrap_node.js:*:*)
at runCallback (timers.js:*:*)
at tryOnImmediate (timers.js:*:*)
at processImmediate [as _immediateCallback] (timers.js:*:*)
[eval]:1
var ______________________________________________; throw 10
^
10
[eval]:1
var ______________________________________________; throw 10
^

18
test/message/stdin_messages.out

@ -1,10 +1,10 @@
[stdin]
[stdin]:1
with(this){__filename}
^^^^
SyntaxError: Strict mode code may not include a with statement
at Object.exports.runInThisContext (vm.js:*)
at createScript (vm.js:*)
at Object.runInThisContext (vm.js:*)
at Object.<anonymous> ([stdin]-wrapper:*:*)
at Module._compile (module.js:*:*)
at Immediate.<anonymous> (bootstrap_node.js:*:*)
@ -13,28 +13,28 @@ SyntaxError: Strict mode code may not include a with statement
at processImmediate [as _immediateCallback] (timers.js:*:*)
42
42
[stdin]:1
throw new Error("hello")
^
Error: hello
at [stdin]:1:*
at [stdin]:1:7
at ContextifyScript.Script.runInThisContext (vm.js:*)
at Object.exports.runInThisContext (vm.js:*)
at Object.runInThisContext (vm.js:*)
at Object.<anonymous> ([stdin]-wrapper:*:*)
at Module._compile (module.js:*:*)
at Immediate.<anonymous> (bootstrap_node.js:*:*)
at runCallback (timers.js:*:*)
at tryOnImmediate (timers.js:*:*)
at processImmediate [as _immediateCallback] (timers.js:*:*)
[stdin]:1
throw new Error("hello")
^
Error: hello
at [stdin]:1:*
at ContextifyScript.Script.runInThisContext (vm.js:*)
at Object.exports.runInThisContext (vm.js:*)
at Object.runInThisContext (vm.js:*)
at Object.<anonymous> ([stdin]-wrapper:*:*)
at Module._compile (module.js:*:*)
at Immediate.<anonymous> (bootstrap_node.js:*:*)
@ -42,14 +42,14 @@ Error: hello
at tryOnImmediate (timers.js:*:*)
at processImmediate [as _immediateCallback] (timers.js:*:*)
100
[stdin]:1
var x = 100; y = x;
^
ReferenceError: y is not defined
at [stdin]:1:16
at ContextifyScript.Script.runInThisContext (vm.js:*)
at Object.exports.runInThisContext (vm.js:*)
at Object.runInThisContext (vm.js:*)
at Object.<anonymous> ([stdin]-wrapper:*:*)
at Module._compile (module.js:*:*)
at Immediate.<anonymous> (bootstrap_node.js:*:*)

4
test/message/undefined_reference_in_new_context.out

@ -1,13 +1,13 @@
before
evalmachine.<anonymous>:1
foo.bar = 5;
^
ReferenceError: foo is not defined
at evalmachine.<anonymous>:1:1
at ContextifyScript.Script.runInContext (vm.js:*)
at ContextifyScript.Script.runInNewContext (vm.js:*)
at Object.exports.runInNewContext (vm.js:*)
at Object.runInNewContext (vm.js:*)
at Object.<anonymous> (*test*message*undefined_reference_in_new_context.js:*)
at Module._compile (module.js:*)
at *..js (module.js:*)

4
test/message/vm_display_runtime_error.out

@ -1,12 +1,12 @@
beginning
test.vm:1
throw new Error("boo!")
^
Error: boo!
at test.vm:1:7
at ContextifyScript.Script.runInThisContext (vm.js:*)
at Object.exports.runInThisContext (vm.js:*)
at Object.runInThisContext (vm.js:*)
at Object.<anonymous> (*test*message*vm_display_runtime_error.js:*)
at Module._compile (module.js:*)
at Object.Module._extensions..js (module.js:*)

9
test/message/vm_display_syntax_error.out

@ -1,10 +1,10 @@
beginning
foo.vm:1
var 4;
^
SyntaxError: Unexpected number
at Object.exports.runInThisContext (vm.js:*)
at createScript (vm.js:*)
at Object.runInThisContext (vm.js:*)
at Object.<anonymous> (*test*message*vm_display_syntax_error.js:*)
at Module._compile (module.js:*)
at Object.Module._extensions..js (module.js:*)
@ -13,12 +13,12 @@ SyntaxError: Unexpected number
at Function.Module._load (module.js:*)
at Module.runMain (module.js:*)
at run (bootstrap_node.js:*)
at startup (bootstrap_node.js:*)
test.vm:1
var 5;
^
SyntaxError: Unexpected number
at Object.exports.runInThisContext (vm.js:*)
at createScript (vm.js:*)
at Object.runInThisContext (vm.js:*)
at Object.<anonymous> (*test*message*vm_display_syntax_error.js:*)
at Module._compile (module.js:*)
at Object.Module._extensions..js (module.js:*)
@ -27,4 +27,3 @@ SyntaxError: Unexpected number
at Function.Module._load (module.js:*)
at Module.runMain (module.js:*)
at run (bootstrap_node.js:*)
at startup (bootstrap_node.js:*)

3
test/message/vm_dont_display_runtime_error.out

@ -3,10 +3,11 @@ middle
test.vm:1
throw new Error("boo!")
^
Error: boo!
at test.vm:1:7
at ContextifyScript.Script.runInThisContext (vm.js:*)
at Object.exports.runInThisContext (vm.js:*)
at Object.runInThisContext (vm.js:*)
at Object.<anonymous> (*test*message*vm_dont_display_runtime_error.js:*)
at Module._compile (module.js:*)
at Object.Module._extensions..js (module.js:*)

5
test/message/vm_dont_display_syntax_error.out

@ -3,8 +3,10 @@ middle
test.vm:1
var 5;
^
SyntaxError: Unexpected number
at Object.exports.runInThisContext (vm.js:*)
at createScript (vm.js:*)
at Object.runInThisContext (vm.js:*)
at Object.<anonymous> (*test*message*vm_dont_display_syntax_error.js:*)
at Module._compile (module.js:*)
at Object.Module._extensions..js (module.js:*)
@ -13,4 +15,3 @@ SyntaxError: Unexpected number
at Function.Module._load (module.js:*)
at Module.runMain (module.js:*)
at run (bootstrap_node.js:*)
at startup (bootstrap_node.js:*)

Loading…
Cancel
Save