| // 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 this in arrow function scope'); |
| |
| (async function test() { |
| session.setupScriptMap(); |
| Protocol.Debugger.enable(); |
| Protocol.Runtime.evaluate({expression: ` |
| function foo() { |
| return () => { |
| let a = this; |
| (function() { |
| let f = () => { debugger; }; |
| f(); |
| }).call('a'); |
| return a; |
| }; |
| } |
| function boo() { |
| foo.call(1)(); |
| } |
| (() => boo.call({}))();` |
| }); |
| let {params:{callFrames}} = await Protocol.Debugger.oncePaused(); |
| for (let callFrame of callFrames) { |
| await session.logSourceLocation(callFrame.location); |
| |
| InspectorTest.log('This on callFrame:'); |
| InspectorTest.logMessage(callFrame.this); |
| let {result:{result}} = await Protocol.Debugger.evaluateOnCallFrame({ |
| callFrameId: callFrame.callFrameId, |
| expression: 'this' |
| }); |
| InspectorTest.log('This in evaluateOnCallFrame:'); |
| InspectorTest.logMessage(result); |
| |
| if (callFrame.this.type === 'undefined' || result.type === 'undefined') { |
| InspectorTest.log('Values equal: ' + (callFrame.this.type === result.type) + '\n'); |
| continue; |
| } |
| |
| let {result:{result:{value}}} = await Protocol.Runtime.callFunctionOn({ |
| functionDeclaration: 'function equal(a) { return this === a; }', |
| objectId: callFrame.this.objectId, |
| arguments: [ result.value ? {value: result.value} : {objectId: result.objectId}], |
| returnByValue: true |
| }); |
| InspectorTest.log('Values equal: ' + value + '\n'); |
| } |
| InspectorTest.completeTest(); |
| })(); |