79 lines
2.2 KiB
JavaScript
79 lines
2.2 KiB
JavaScript
|
// Copyright 2016 the V8 project authors. All rights reserved.
|
||
|
// Use of this source code is governed by a BSD-style license that can be
|
||
|
// found in the LICENSE file.
|
||
|
|
||
|
InspectorTest.addScript(
|
||
|
`function *gen(a) {
|
||
|
var b = 42;
|
||
|
yield a;
|
||
|
return b;
|
||
|
}
|
||
|
function testSuspendedGenerator()
|
||
|
{
|
||
|
var g = gen(420);
|
||
|
g.next();
|
||
|
|
||
|
debugger;
|
||
|
}`);
|
||
|
|
||
|
Protocol.Debugger.enable().then(testSuite);
|
||
|
|
||
|
function dumpInnermostScope(msg) {
|
||
|
var scopes = msg.result.result;
|
||
|
var inner_scope = scopes[0].value;
|
||
|
return Protocol.Runtime.getProperties({ objectId : inner_scope.objectId })
|
||
|
.then(InspectorTest.logMessage);
|
||
|
}
|
||
|
|
||
|
function dumpGeneratorScopes(msg)
|
||
|
{
|
||
|
var props = msg.result.internalProperties;
|
||
|
var promises = props
|
||
|
.filter(prop => prop.name == "[[Scopes]]")
|
||
|
.map(prop => prop.value.objectId)
|
||
|
.map(scopesId => Protocol.Runtime.getProperties({ objectId : scopesId })
|
||
|
.then(dumpInnermostScope));
|
||
|
return Promise.all(promises);
|
||
|
}
|
||
|
|
||
|
function fetchGeneratorProperties(objectId) {
|
||
|
return Protocol.Runtime.getProperties({ objectId : objectId });
|
||
|
}
|
||
|
|
||
|
function extractGeneratorObjectFromScope(scopeId) {
|
||
|
return Protocol.Runtime.getProperties({ objectId : scopeId })
|
||
|
.then(msg => {
|
||
|
var generatorObjectId = msg.result.result[0].value.objectId;
|
||
|
return fetchGeneratorProperties(generatorObjectId);
|
||
|
});
|
||
|
}
|
||
|
|
||
|
function dumpGeneratorScopesOnPause(msg) {
|
||
|
var scopeChain = msg.params.callFrames[0].scopeChain;
|
||
|
var promises = scopeChain
|
||
|
.filter(scope => scope.type === "local")
|
||
|
.map(scope => scope.object.objectId)
|
||
|
.map(scopeId => extractGeneratorObjectFromScope(scopeId)
|
||
|
.then(dumpGeneratorScopes));
|
||
|
return Promise.all(promises).then(Protocol.Debugger.resume);
|
||
|
}
|
||
|
|
||
|
function testSuite() {
|
||
|
InspectorTest.runTestSuite([
|
||
|
|
||
|
function testScopesPaused(next) {
|
||
|
Protocol.Debugger.oncePaused()
|
||
|
.then(dumpGeneratorScopesOnPause)
|
||
|
.then(next);
|
||
|
Protocol.Runtime.evaluate({ expression : "testSuspendedGenerator()" });
|
||
|
},
|
||
|
|
||
|
function testScopesNonPaused(next) {
|
||
|
Protocol.Runtime.evaluate({ expression : "gen(430)"})
|
||
|
.then(msg => fetchGeneratorProperties(msg.result.result.objectId))
|
||
|
.then(dumpGeneratorScopes)
|
||
|
.then(next);
|
||
|
},
|
||
|
]);
|
||
|
}
|