| // Copyright 2017 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. |
| |
| let {session, contextGroup, Protocol} = InspectorTest.start('Checks [[Scopes]] for functions'); |
| |
| contextGroup.addScript(` |
| var f; |
| try { |
| throw 1; |
| } catch (a) { |
| with({b:2}) { |
| function closure() { |
| var c = 3; |
| function foo() { |
| var d = 4; |
| return a + b + c + d; |
| } |
| return foo; |
| } |
| f = closure; |
| } |
| } |
| var e = 5; |
| //# sourceURL=test.js`); |
| |
| (async function test() { |
| let {result:{result:{objectId}}} = await Protocol.Runtime.evaluate({ |
| expression: 'f()' |
| }); |
| let {result:{internalProperties}} = await Protocol.Runtime.getProperties({ |
| objectId |
| }); |
| let scopes = internalProperties.find(prop => prop.name === '[[Scopes]]'); |
| let {result:{result}} = await Protocol.Runtime.getProperties({ |
| objectId: scopes.value.objectId |
| }); |
| await Promise.all(result.map(async scope => { |
| scope.variables = (await Protocol.Runtime.getProperties({ |
| objectId: scope.value.objectId |
| })).result.result; |
| })); |
| let catchScope = result.find(scope => scope.value.description === 'Catch'); |
| InspectorTest.log('Catch:'); |
| InspectorTest.logMessage(catchScope.variables.find(variable => variable.name === 'a')); |
| InspectorTest.log('With block:'); |
| let withScope = result.find(scope => scope.value.description === 'With Block'); |
| InspectorTest.logMessage(withScope.variables.find(variable => variable.name === 'b')); |
| InspectorTest.log('Closure (closure):'); |
| let closureScope = result.find(scope => scope.value.description === 'Closure (closure)'); |
| InspectorTest.logMessage(closureScope.variables.find(variable => variable.name === 'c')); |
| InspectorTest.log('Global:'); |
| let globalScope = result.find(scope => scope.value.description === 'Global'); |
| InspectorTest.logMessage(globalScope.variables.find(variable => variable.name === 'e')); |
| InspectorTest.completeTest(); |
| })(); |