Permalink
Browse files

lib,src: remove vm.runInDebugContext()

The V8 API it is based on is deprecated and scheduled for removal later
this year.  Remove it.

PR-URL: #13295
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Franziska Hinkelmann <franziska.hinkelmann@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Robert Jefe Lindstaedt <robert.lindstaedt@gmail.com>
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Reviewed-By: Timothy Gu <timothygu99@gmail.com>
  • Loading branch information...
bnoordhuis committed Nov 23, 2017
1 parent 05948d8 commit 6f724e1563159fb332ed43068649958e99e7be28
View
@@ -600,10 +600,9 @@ a V8-inspector based CLI debugger available through `node inspect`.
<a id="DEP0069"></a>
### DEP0069: vm.runInDebugContext(string)
Type: Runtime
Type: End-of-Life
The DebugContext will be removed in V8 soon and will not be available in Node
10+.
DebugContext has been removed in V8 and is not available in Node 10+.
*Note*: DebugContext was an experimental API.
View
@@ -334,36 +334,6 @@ console.log(util.inspect(sandbox));
// { globalVar: 1024 }
```
## vm.runInDebugContext(code)
<!-- YAML
added: v0.11.14
deprecated: v8.0.0
changes:
- version: v9.0.0
pr-url: https://github.com/nodejs/node/pull/12815
description: Calling this function now emits a deprecation warning.
-->
> Stability: 0 - Deprecated. An alternative is in development.
* `code` {string} The JavaScript code to compile and run.
The `vm.runInDebugContext()` method compiles and executes `code` inside the V8
debug context. The primary use case is to gain access to the V8 `Debug` object:
```js
const vm = require('vm');
const Debug = vm.runInDebugContext('Debug');
console.log(Debug.findScript(process.emit).name); // 'events.js'
console.log(Debug.findScript(process.exit).name); // 'internal/process.js'
```
*Note*: The debug context and object are intrinsically tied to V8's debugger
implementation and may change (or even be removed) without prior warning.
The `Debug` object can also be made available using the V8-specific
`--expose_debug_as=` [command line option][].
## vm.runInNewContext(code[, sandbox][, options])
<!-- YAML
added: v0.3.1
@@ -517,7 +487,6 @@ associating it with the `sandbox` object is what this document refers to as
[`vm.runInContext()`]: #vm_vm_runincontext_code_contextifiedsandbox_options
[`vm.runInThisContext()`]: #vm_vm_runinthiscontext_code_options
[V8 Embedder's Guide]: https://github.com/v8/v8/wiki/Embedder's%20Guide#contexts
[command line option]: cli.html
[contextified]: #vm_what_does_it_mean_to_contextify_an_object
[global object]: https://es5.github.io/#x15.1
[indirect `eval()` call]: https://es5.github.io/#x10.4.2
View
@@ -629,10 +629,6 @@ Module.prototype._compile = function(content, filename) {
if (filename === resolvedArgv) {
delete process._breakFirstLine;
inspectorWrapper = process.binding('inspector').callAndPauseOnStart;
if (!inspectorWrapper) {
const Debug = vm.runInDebugContext('Debug');
Debug.setBreakPoint(compiledWrapper, 0, 0);
}
}
}
var dirname = path.dirname(filename);
View
@@ -27,7 +27,6 @@ const {
makeContext,
isContext,
runInDebugContext: runInDebugContext_
} = process.binding('contextify');
// The binding provides a few useful primitives:
@@ -105,19 +104,6 @@ function sigintHandlersWrap(fn, thisArg, argsArray) {
}
}
let runInDebugContextWarned = false;
function runInDebugContext(code) {
if (runInDebugContextWarned === false) {
runInDebugContextWarned = true;
process.emitWarning(
'DebugContext has been deprecated and will be removed in a ' +
'future version.',
'DeprecationWarning',
'DEP0069');
}
return runInDebugContext_(code);
}
function runInContext(code, contextifiedSandbox, options) {
if (typeof options === 'string') {
options = {
@@ -156,7 +142,6 @@ module.exports = {
Script,
createContext,
createScript,
runInDebugContext,
runInContext,
runInNewContext,
runInThisContext,
View
@@ -22,15 +22,13 @@
#include "node_internals.h"
#include "node_watchdog.h"
#include "base_object-inl.h"
#include "v8-debug.h"
namespace node {
using v8::Array;
using v8::ArrayBuffer;
using v8::Boolean;
using v8::Context;
using v8::Debug;
using v8::EscapableHandleScope;
using v8::External;
using v8::Function;
@@ -218,42 +216,11 @@ class ContextifyContext {
function_template->InstanceTemplate()->SetInternalFieldCount(1);
env->set_script_data_constructor_function(function_template->GetFunction());
env->SetMethod(target, "runInDebugContext", RunInDebugContext);
env->SetMethod(target, "makeContext", MakeContext);
env->SetMethod(target, "isContext", IsContext);
}
static void RunInDebugContext(const FunctionCallbackInfo<Value>& args) {
Local<String> script_source(args[0]->ToString(args.GetIsolate()));
if (script_source.IsEmpty())
return; // Exception pending.
Local<Context> debug_context = Debug::GetDebugContext(args.GetIsolate());
Environment* env = Environment::GetCurrent(args);
if (debug_context.IsEmpty()) {
// Force-load the debug context.
auto dummy_event_listener = [] (const Debug::EventDetails&) {};
Debug::SetDebugEventListener(args.GetIsolate(), dummy_event_listener);
debug_context = Debug::GetDebugContext(args.GetIsolate());
CHECK(!debug_context.IsEmpty());
// Ensure that the debug context has an Environment assigned in case
// a fatal error is raised. The fatal exception handler in node.cc
// is not equipped to deal with contexts that don't have one and
// can't easily be taught that due to a deficiency in the V8 API:
// there is no way for the embedder to tell if the data index is
// in use.
const int index = Environment::kContextEmbedderDataIndex;
debug_context->SetAlignedPointerInEmbedderData(index, env);
}
Context::Scope context_scope(debug_context);
MaybeLocal<Script> script = Script::Compile(debug_context, script_source);
if (script.IsEmpty())
return; // Exception pending.
args.GetReturnValue().Set(script.ToLocalChecked()->Run());
}
static void MakeContext(const FunctionCallbackInfo<Value>& args) {
Environment* env = Environment::GetCurrent(args);

This file was deleted.

Oops, something went wrong.
@@ -19,12 +19,14 @@
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
// USE OR OTHER DEALINGS IN THE SOFTWARE.
// Flags: --expose_internals
'use strict';
const common = require('../common');
const assert = require('assert');
const JSStream = process.binding('js_stream').JSStream;
const util = require('util');
const vm = require('vm');
const { previewMapIterator } = require('internal/v8');
assert.strictEqual(util.inspect(1), '1');
assert.strictEqual(util.inspect(false), 'false');
@@ -442,11 +444,9 @@ assert.strictEqual(util.inspect(-0), '-0');
// test for Array constructor in different context
{
const Debug = vm.runInDebugContext('Debug');
const map = new Map();
map.set(1, 2);
const mirror = Debug.MakeMirror(map.entries(), true);
const vals = mirror.preview();
const vals = previewMapIterator(map.entries(), 100);
const valsOutput = [];
for (const o of vals) {
valsOutput.push(o);

This file was deleted.

Oops, something went wrong.
@@ -14,9 +14,9 @@ if (common.isWindows ||
const base = require('./tick-processor-base.js');
base.runTest({
pattern: /RunInDebugContext/,
pattern: /MakeContext/,
code: `function f() {
require('vm').runInDebugContext('Debug');
require('vm').createContext({});
setImmediate(function() { f(); });
};
f();`
@@ -16,7 +16,7 @@ const base = require('./tick-processor-base.js');
base.runTest({
pattern: /^{/,
code: `function f() {
require('vm').runInDebugContext('Debug');
require('vm').createContext({});
setImmediate(function() { f(); });
};
f();`,

0 comments on commit 6f724e1

Please sign in to comment.