From f3546b742bc61fd1dc1028d35e204ec34efaff81 Mon Sep 17 00:00:00 2001 From: James M Snell Date: Tue, 14 Feb 2017 21:02:50 -0800 Subject: [PATCH] vm: refactor vm module MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Switch to the more efficient module.exports = {} pattern. PR-URL: https://github.com/nodejs/node/pull/11392 Reviewed-By: Michaƫl Zasso Reviewed-By: Colin Ihrig --- lib/vm.js | 63 ++++++++++--------- test/message/eval_messages.out | 14 +++-- test/message/stdin_messages.out | 18 +++--- .../undefined_reference_in_new_context.out | 4 +- test/message/vm_display_runtime_error.out | 4 +- test/message/vm_display_syntax_error.out | 9 ++- .../message/vm_dont_display_runtime_error.out | 3 +- test/message/vm_dont_display_syntax_error.out | 5 +- 8 files changed, 66 insertions(+), 54 deletions(-) diff --git a/lib/vm.js b/lib/vm.js index 73359c1b6825b0..785148c2d22e8c 100644 --- a/lib/vm.js +++ b/lib/vm.js @@ -37,17 +37,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)) { @@ -56,28 +50,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. @@ -102,3 +79,31 @@ function sigintHandlersWrap(fn) { } } } + +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 +}; diff --git a/test/message/eval_messages.out b/test/message/eval_messages.out index 44965be374bac5..ba0c35431c6907 100644 --- a/test/message/eval_messages.out +++ b/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. ([eval]-wrapper:*:*) at Module._compile (module.js:*:*) at Immediate. (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. ([eval]-wrapper:*:*) at Module._compile (module.js:*:*) at Immediate. (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. ([eval]-wrapper:*:*) at Module._compile (module.js:*:*) at Immediate. (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. ([eval]-wrapper:*:*) at Module._compile (module.js:*:*) at Immediate. (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 ^ diff --git a/test/message/stdin_messages.out b/test/message/stdin_messages.out index 828bee92cb6f7f..b4c51d7ad567f0 100644 --- a/test/message/stdin_messages.out +++ b/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. ([stdin]-wrapper:*:*) at Module._compile (module.js:*:*) at Immediate. (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. ([stdin]-wrapper:*:*) at Module._compile (module.js:*:*) at Immediate. (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. ([stdin]-wrapper:*:*) at Module._compile (module.js:*:*) at Immediate. (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. ([stdin]-wrapper:*:*) at Module._compile (module.js:*:*) at Immediate. (bootstrap_node.js:*:*) diff --git a/test/message/undefined_reference_in_new_context.out b/test/message/undefined_reference_in_new_context.out index 04b9a21acdeb1f..93bc1dcc99c3e1 100644 --- a/test/message/undefined_reference_in_new_context.out +++ b/test/message/undefined_reference_in_new_context.out @@ -1,13 +1,13 @@ before - evalmachine.:1 foo.bar = 5; ^ + ReferenceError: foo is not defined at evalmachine.: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. (*test*message*undefined_reference_in_new_context.js:*) at Module._compile (module.js:*) at *..js (module.js:*) diff --git a/test/message/vm_display_runtime_error.out b/test/message/vm_display_runtime_error.out index b7fe798cd29adb..d5cf1d3ee50dbb 100644 --- a/test/message/vm_display_runtime_error.out +++ b/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. (*test*message*vm_display_runtime_error.js:*) at Module._compile (module.js:*) at Object.Module._extensions..js (module.js:*) diff --git a/test/message/vm_display_syntax_error.out b/test/message/vm_display_syntax_error.out index 8917f2f9d0cbb7..9ec62eacb895f0 100644 --- a/test/message/vm_display_syntax_error.out +++ b/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. (*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. (*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:*) diff --git a/test/message/vm_dont_display_runtime_error.out b/test/message/vm_dont_display_runtime_error.out index e0795d1f535e35..a60bde2a8c29ea 100644 --- a/test/message/vm_dont_display_runtime_error.out +++ b/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. (*test*message*vm_dont_display_runtime_error.js:*) at Module._compile (module.js:*) at Object.Module._extensions..js (module.js:*) diff --git a/test/message/vm_dont_display_syntax_error.out b/test/message/vm_dont_display_syntax_error.out index de3daab301890e..bc5b180dc1fa2a 100644 --- a/test/message/vm_dont_display_syntax_error.out +++ b/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. (*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:*)