fb78710c06
There are two break locations at the same source location by desugaring: - call iterator.next, - before variable assignment. Additionally location for for..of loops is moved from before "of" to before each variable expression. We should not report first implicit call to avoid user confusion. User still able to go into .next function with both scenarios: - when this call is reached by stepOver or stepInto from previous line, - when this call is reached because of breakpoint at current line. BUG=v8:6425 R=dgozman@chromium.org,jgruber@chromium.org Review-Url: https://codereview.chromium.org/2893313002 Cr-Commit-Position: refs/heads/master@{#45509}
1100 lines
15 KiB
Plaintext
1100 lines
15 KiB
Plaintext
Checks possible break locations.
|
|
|
|
Running test: testEval
|
|
break at:
|
|
function testEval() {
|
|
#eval('// comment only');
|
|
eval('// comment only\n');
|
|
|
|
break at:
|
|
// comment onl#y
|
|
|
|
break at:
|
|
eval('// comment only');
|
|
#eval('// comment only\n');
|
|
}
|
|
|
|
break at:
|
|
// comment only#
|
|
|
|
|
|
break at:
|
|
eval('// comment only\n');
|
|
#}
|
|
|
|
|
|
|
|
Running test: testProcedure
|
|
break at:
|
|
function testProcedure() {
|
|
#procedure();
|
|
}
|
|
|
|
break at:
|
|
function procedure() {
|
|
var a = #1;
|
|
var b = 2;
|
|
|
|
break at:
|
|
var a = 1;
|
|
var b = #2;
|
|
}
|
|
|
|
break at:
|
|
var b = 2;
|
|
#}
|
|
|
|
|
|
break at:
|
|
procedure();
|
|
#}
|
|
|
|
|
|
|
|
Running test: testIf
|
|
break at:
|
|
var a;
|
|
if (true) #a = true;
|
|
if (!a) {
|
|
|
|
break at:
|
|
if (true) a = true;
|
|
#if (!a) {
|
|
a = true;
|
|
|
|
break at:
|
|
} else {
|
|
#a = false;
|
|
}
|
|
|
|
break at:
|
|
}
|
|
#if (returnTrue()) {
|
|
a = false;
|
|
|
|
break at:
|
|
function returnTrue() {
|
|
#return true;
|
|
}
|
|
|
|
break at:
|
|
return true;
|
|
#}
|
|
|
|
|
|
break at:
|
|
if (returnTrue()) {
|
|
#a = false;
|
|
} else {
|
|
|
|
break at:
|
|
}
|
|
#}
|
|
|
|
|
|
|
|
Running test: testEmptyFunction
|
|
break at:
|
|
function testEmptyFunction() {
|
|
#emptyFunction();
|
|
}
|
|
|
|
break at:
|
|
|
|
function emptyFunction() {#}
|
|
|
|
|
|
break at:
|
|
emptyFunction();
|
|
#}
|
|
|
|
|
|
|
|
Running test: testCallArguments
|
|
break at:
|
|
function testCallArguments() {
|
|
#twoArguments(emptyFunction(), emptyFunction());
|
|
}
|
|
|
|
break at:
|
|
|
|
function emptyFunction() {#}
|
|
|
|
|
|
break at:
|
|
function testCallArguments() {
|
|
twoArguments(emptyFunction(), #emptyFunction());
|
|
}
|
|
|
|
break at:
|
|
|
|
function emptyFunction() {#}
|
|
|
|
|
|
break at:
|
|
function testCallArguments() {
|
|
#twoArguments(emptyFunction(), emptyFunction());
|
|
}
|
|
|
|
break at:
|
|
function twoArguments(a1, a2) {
|
|
#}
|
|
|
|
|
|
break at:
|
|
twoArguments(emptyFunction(), emptyFunction());
|
|
#}
|
|
|
|
|
|
|
|
Running test: testNested
|
|
break at:
|
|
}
|
|
#nested1();
|
|
}
|
|
|
|
break at:
|
|
}
|
|
#return nested2();
|
|
}
|
|
|
|
break at:
|
|
}
|
|
#nested3();
|
|
return;
|
|
|
|
break at:
|
|
function nested3() {
|
|
#}
|
|
nested3();
|
|
|
|
break at:
|
|
nested3();
|
|
#return;
|
|
}
|
|
|
|
break at:
|
|
return;
|
|
#}
|
|
return nested2();
|
|
|
|
break at:
|
|
return nested2();
|
|
#}
|
|
nested1();
|
|
|
|
break at:
|
|
nested1();
|
|
#}
|
|
|
|
|
|
|
|
Running test: testCallAtReturn
|
|
break at:
|
|
function testCallAtReturn() {
|
|
#return returnCall();
|
|
}
|
|
|
|
break at:
|
|
function returnCall() {
|
|
#return return42();
|
|
}
|
|
|
|
break at:
|
|
function return42() {
|
|
#return 42;
|
|
}
|
|
|
|
break at:
|
|
return 42;
|
|
#}
|
|
|
|
|
|
break at:
|
|
return return42();
|
|
#}
|
|
|
|
|
|
break at:
|
|
return returnCall();
|
|
#}
|
|
|
|
|
|
|
|
Running test: testWith
|
|
break at:
|
|
function testWith() {
|
|
#with (returnObject()) {
|
|
foo();
|
|
|
|
break at:
|
|
function returnObject() {
|
|
#return ({ foo: () => 42 });
|
|
}
|
|
|
|
break at:
|
|
return ({ foo: () => 42 });
|
|
#}
|
|
|
|
|
|
break at:
|
|
with (returnObject()) {
|
|
#foo();
|
|
}
|
|
|
|
break at:
|
|
function returnObject() {
|
|
return ({ foo: () => #42 });
|
|
}
|
|
|
|
break at:
|
|
function returnObject() {
|
|
return ({ foo: () => 42# });
|
|
}
|
|
|
|
break at:
|
|
}
|
|
#with({}) {
|
|
return;
|
|
|
|
break at:
|
|
with({}) {
|
|
#return;
|
|
}
|
|
|
|
break at:
|
|
}
|
|
#}
|
|
|
|
|
|
|
|
Running test: testForLoop
|
|
break at:
|
|
function testForLoop() {
|
|
for (var i = #0; i < 1; ++i) {}
|
|
for (var i = 0; i < 1; ++i) i;
|
|
|
|
break at:
|
|
function testForLoop() {
|
|
for (var i = 0; i #< 1; ++i) {}
|
|
for (var i = 0; i < 1; ++i) i;
|
|
|
|
break at:
|
|
function testForLoop() {
|
|
for (var i = 0; i < 1; ++#i) {}
|
|
for (var i = 0; i < 1; ++i) i;
|
|
|
|
break at:
|
|
function testForLoop() {
|
|
for (var i = 0; i #< 1; ++i) {}
|
|
for (var i = 0; i < 1; ++i) i;
|
|
|
|
break at:
|
|
for (var i = 0; i < 1; ++i) {}
|
|
for (var i = #0; i < 1; ++i) i;
|
|
for (var i = 0; i < 0; ++i) {}
|
|
|
|
break at:
|
|
for (var i = 0; i < 1; ++i) {}
|
|
for (var i = 0; i #< 1; ++i) i;
|
|
for (var i = 0; i < 0; ++i) {}
|
|
|
|
break at:
|
|
for (var i = 0; i < 1; ++i) {}
|
|
for (var i = 0; i < 1; ++i) #i;
|
|
for (var i = 0; i < 0; ++i) {}
|
|
|
|
break at:
|
|
for (var i = 0; i < 1; ++i) {}
|
|
for (var i = 0; i < 1; ++#i) i;
|
|
for (var i = 0; i < 0; ++i) {}
|
|
|
|
break at:
|
|
for (var i = 0; i < 1; ++i) {}
|
|
for (var i = 0; i #< 1; ++i) i;
|
|
for (var i = 0; i < 0; ++i) {}
|
|
|
|
break at:
|
|
for (var i = 0; i < 1; ++i) i;
|
|
for (var i = #0; i < 0; ++i) {}
|
|
}
|
|
|
|
break at:
|
|
for (var i = 0; i < 1; ++i) i;
|
|
for (var i = 0; i #< 0; ++i) {}
|
|
}
|
|
|
|
break at:
|
|
for (var i = 0; i < 0; ++i) {}
|
|
#}
|
|
|
|
|
|
|
|
Running test: testForOfLoop
|
|
break at:
|
|
function testForOfLoop() {
|
|
for (var k of #[]) {}
|
|
for (var k of [1]) k;
|
|
|
|
break at:
|
|
function testForOfLoop() {
|
|
for (var #k of []) {}
|
|
for (var k of [1]) k;
|
|
|
|
break at:
|
|
for (var k of []) {}
|
|
for (var k of #[1]) k;
|
|
var a = [];
|
|
|
|
break at:
|
|
for (var k of []) {}
|
|
for (var #k of [1]) k;
|
|
var a = [];
|
|
|
|
break at:
|
|
for (var k of []) {}
|
|
for (var k of [1]) #k;
|
|
var a = [];
|
|
|
|
break at:
|
|
for (var k of []) {}
|
|
for (var #k of [1]) k;
|
|
var a = [];
|
|
|
|
break at:
|
|
for (var k of [1]) k;
|
|
var a = #[];
|
|
for (var k of a) {}
|
|
|
|
break at:
|
|
var a = [];
|
|
for (var k of #a) {}
|
|
}
|
|
|
|
break at:
|
|
var a = [];
|
|
for (var #k of a) {}
|
|
}
|
|
|
|
break at:
|
|
for (var k of a) {}
|
|
#}
|
|
|
|
|
|
|
|
Running test: testForInLoop
|
|
break at:
|
|
function testForInLoop() {
|
|
var o = #{};
|
|
for (var k in o) {}
|
|
|
|
break at:
|
|
var o = {};
|
|
for (var k in #o) {}
|
|
for (var k in o) k;
|
|
|
|
break at:
|
|
var o = {};
|
|
for (var #k in o) {}
|
|
for (var k in o) k;
|
|
|
|
break at:
|
|
for (var k in o) {}
|
|
for (var k in #o) k;
|
|
for (var k in { a:1 }) {}
|
|
|
|
break at:
|
|
for (var k in o) {}
|
|
for (var #k in o) k;
|
|
for (var k in { a:1 }) {}
|
|
|
|
break at:
|
|
for (var k in o) k;
|
|
for (var k in #{ a:1 }) {}
|
|
for (var k in { a:1 }) k;
|
|
|
|
break at:
|
|
for (var k in o) k;
|
|
for (var #k in { a:1 }) {}
|
|
for (var k in { a:1 }) k;
|
|
|
|
break at:
|
|
for (var k in { a:1 }) {}
|
|
for (var k in #{ a:1 }) k;
|
|
}
|
|
|
|
break at:
|
|
for (var k in { a:1 }) {}
|
|
for (var #k in { a:1 }) k;
|
|
}
|
|
|
|
break at:
|
|
for (var k in { a:1 }) {}
|
|
for (var k in { a:1 }) #k;
|
|
}
|
|
|
|
break at:
|
|
for (var k in { a:1 }) {}
|
|
for (var #k in { a:1 }) k;
|
|
}
|
|
|
|
break at:
|
|
for (var k in { a:1 }) k;
|
|
#}
|
|
|
|
|
|
|
|
Running test: testSimpleExpressions
|
|
break at:
|
|
1 + 2 + 3;
|
|
var a = #1;
|
|
++a;
|
|
|
|
break at:
|
|
var a = 1;
|
|
#++a;
|
|
a--;
|
|
|
|
break at:
|
|
++a;
|
|
#a--;
|
|
}
|
|
|
|
break at:
|
|
a--;
|
|
#}
|
|
|
|
|
|
|
|
Running test: testGetter
|
|
break at:
|
|
function testGetter() {
|
|
#getterFoo();
|
|
}
|
|
|
|
break at:
|
|
Object.defineProperty(this, 'getterFoo', {
|
|
get: () => #return42
|
|
});
|
|
|
|
break at:
|
|
Object.defineProperty(this, 'getterFoo', {
|
|
get: () => return42#
|
|
});
|
|
|
|
break at:
|
|
function testGetter() {
|
|
#getterFoo();
|
|
}
|
|
|
|
break at:
|
|
function return42() {
|
|
#return 42;
|
|
}
|
|
|
|
break at:
|
|
return 42;
|
|
#}
|
|
|
|
|
|
break at:
|
|
getterFoo();
|
|
#}
|
|
|
|
|
|
|
|
Running test: testChainedCalls
|
|
break at:
|
|
function testChainedCalls() {
|
|
#obj.foo().boo()();
|
|
}
|
|
|
|
break at:
|
|
var obj = {
|
|
foo: () => (#{
|
|
boo: () => return42
|
|
|
|
break at:
|
|
boo: () => return42
|
|
})#
|
|
};
|
|
|
|
break at:
|
|
function testChainedCalls() {
|
|
obj.foo().#boo()();
|
|
}
|
|
|
|
break at:
|
|
foo: () => ({
|
|
boo: () => #return42
|
|
})
|
|
|
|
break at:
|
|
foo: () => ({
|
|
boo: () => return42#
|
|
})
|
|
|
|
break at:
|
|
function testChainedCalls() {
|
|
obj.foo().boo()#();
|
|
}
|
|
|
|
break at:
|
|
function return42() {
|
|
#return 42;
|
|
}
|
|
|
|
break at:
|
|
return 42;
|
|
#}
|
|
|
|
|
|
break at:
|
|
obj.foo().boo()();
|
|
#}
|
|
|
|
|
|
|
|
Running test: testChainedWithNative
|
|
break at:
|
|
function testChainedWithNative() {
|
|
#Array.from([1]).concat([2]).map(v => v * 2);
|
|
}
|
|
|
|
break at:
|
|
function testChainedWithNative() {
|
|
Array.from([1]).concat([2]).map(v => v #* 2);
|
|
}
|
|
|
|
break at:
|
|
function testChainedWithNative() {
|
|
Array.from([1]).concat([2]).map(v => v * 2#);
|
|
}
|
|
|
|
break at:
|
|
function testChainedWithNative() {
|
|
Array.from([1]).concat([2]).map(v => v #* 2);
|
|
}
|
|
|
|
break at:
|
|
function testChainedWithNative() {
|
|
Array.from([1]).concat([2]).map(v => v * 2#);
|
|
}
|
|
|
|
break at:
|
|
Array.from([1]).concat([2]).map(v => v * 2);
|
|
#}
|
|
|
|
|
|
|
|
Running test: testPromiseThen
|
|
break at:
|
|
function testPromiseThen() {
|
|
#return Promise.resolve().then(v => v * 2).then(v => v * 2);
|
|
}
|
|
|
|
break at:
|
|
return Promise.resolve().then(v => v * 2).then(v => v * 2);
|
|
#}
|
|
|
|
|
|
|
|
Running test: testSwitch
|
|
break at:
|
|
function testSwitch() {
|
|
for (var i = #0; i < 3; ++i) {
|
|
switch(i) {
|
|
|
|
break at:
|
|
function testSwitch() {
|
|
for (var i = 0; i #< 3; ++i) {
|
|
switch(i) {
|
|
|
|
break at:
|
|
for (var i = 0; i < 3; ++i) {
|
|
#switch(i) {
|
|
case 0: continue;
|
|
|
|
break at:
|
|
switch(i) {
|
|
case 0: #continue;
|
|
case 1: return42(); break;
|
|
|
|
break at:
|
|
function testSwitch() {
|
|
for (var i = 0; i < 3; ++#i) {
|
|
switch(i) {
|
|
|
|
break at:
|
|
function testSwitch() {
|
|
for (var i = 0; i #< 3; ++i) {
|
|
switch(i) {
|
|
|
|
break at:
|
|
for (var i = 0; i < 3; ++i) {
|
|
#switch(i) {
|
|
case 0: continue;
|
|
|
|
break at:
|
|
case 0: continue;
|
|
case 1: #return42(); break;
|
|
default: return;
|
|
|
|
break at:
|
|
function return42() {
|
|
#return 42;
|
|
}
|
|
|
|
break at:
|
|
return 42;
|
|
#}
|
|
|
|
|
|
break at:
|
|
case 0: continue;
|
|
case 1: return42(); #break;
|
|
default: return;
|
|
|
|
break at:
|
|
function testSwitch() {
|
|
for (var i = 0; i < 3; ++#i) {
|
|
switch(i) {
|
|
|
|
break at:
|
|
function testSwitch() {
|
|
for (var i = 0; i #< 3; ++i) {
|
|
switch(i) {
|
|
|
|
break at:
|
|
for (var i = 0; i < 3; ++i) {
|
|
#switch(i) {
|
|
case 0: continue;
|
|
|
|
break at:
|
|
case 1: return42(); break;
|
|
default: #return;
|
|
}
|
|
|
|
break at:
|
|
}
|
|
#}
|
|
|
|
|
|
|
|
Running test: testGenerator
|
|
break at:
|
|
function testGenerator() {
|
|
var gen = #idMaker();
|
|
return42();
|
|
|
|
break at:
|
|
function* idMaker() {
|
|
#yield 1;
|
|
yield 2;
|
|
|
|
break at:
|
|
gen.next().value;
|
|
#debugger;
|
|
gen.next().value;
|
|
|
|
break at:
|
|
debugger;
|
|
#gen.next().value;
|
|
return42();
|
|
|
|
break at:
|
|
yield 1;
|
|
#yield 2;
|
|
yield 3;
|
|
|
|
break at:
|
|
yield 2;
|
|
#yield 3;
|
|
}
|
|
|
|
break at:
|
|
yield 3;
|
|
#}
|
|
|
|
|
|
break at:
|
|
gen.next().value;
|
|
#}
|
|
|
|
|
|
|
|
Running test: testCaughtException
|
|
break at:
|
|
try {
|
|
#throwException()
|
|
} catch (e) {
|
|
|
|
break at:
|
|
function throwException() {
|
|
#throw new Error();
|
|
}
|
|
|
|
break at:
|
|
} catch (e) {
|
|
#return;
|
|
}
|
|
|
|
break at:
|
|
}
|
|
#}
|
|
|
|
|
|
|
|
Running test: testClasses
|
|
break at:
|
|
}
|
|
#new Lion().speak();
|
|
}
|
|
|
|
break at:
|
|
constructor(name) {
|
|
#super(name);
|
|
}
|
|
|
|
break at:
|
|
constructor(name) {
|
|
#this.name = name;
|
|
}
|
|
|
|
break at:
|
|
this.name = name;
|
|
#}
|
|
|
|
|
|
break at:
|
|
super(name);
|
|
#}
|
|
|
|
|
|
break at:
|
|
}
|
|
new Lion().#speak();
|
|
}
|
|
|
|
break at:
|
|
speak() {
|
|
#super.speak();
|
|
}
|
|
|
|
break at:
|
|
speak() {
|
|
#}
|
|
}
|
|
|
|
break at:
|
|
super.speak();
|
|
#}
|
|
}
|
|
|
|
break at:
|
|
new Lion().speak();
|
|
#}
|
|
|
|
|
|
|
|
Running test: testAsyncAwait
|
|
break at:
|
|
async function testAsyncAwait() {
|
|
#await asyncFoo();
|
|
await awaitBoo();
|
|
|
|
break at:
|
|
async function testAsyncAwait() {
|
|
await #asyncFoo();
|
|
await awaitBoo();
|
|
|
|
break at:
|
|
async function asyncFoo() {
|
|
#await Promise.resolve().then(v => v * 2);
|
|
return42();
|
|
|
|
break at:
|
|
async function asyncFoo() {
|
|
await Promise.resolve().#then(v => v * 2);
|
|
return42();
|
|
|
|
break at:
|
|
async function asyncFoo() {
|
|
await Promise.#resolve().then(v => v * 2);
|
|
return42();
|
|
|
|
break at:
|
|
async function asyncFoo() {
|
|
await Promise.resolve().#then(v => v * 2);
|
|
return42();
|
|
|
|
break at:
|
|
async function asyncFoo() {
|
|
#await Promise.resolve().then(v => v * 2);
|
|
return42();
|
|
|
|
break at:
|
|
function return42() {
|
|
#return 42;
|
|
}
|
|
|
|
break at:
|
|
return 42;
|
|
#}
|
|
|
|
|
|
break at:
|
|
async function asyncBoo() {
|
|
#await Promise.resolve();
|
|
}
|
|
|
|
break at:
|
|
async function asyncBoo() {
|
|
await Promise.#resolve();
|
|
}
|
|
|
|
break at:
|
|
async function asyncBoo() {
|
|
#await Promise.resolve();
|
|
}
|
|
|
|
|
|
Running test: testPromiseAsyncWithCode
|
|
break at:
|
|
var nextTest;
|
|
var testPromise = #new Promise(resolve => nextTest = resolve);
|
|
async function main() {
|
|
|
|
break at:
|
|
var nextTest;
|
|
var testPromise = new Promise(resolve => nextTest #= resolve);
|
|
async function main() {
|
|
|
|
break at:
|
|
var nextTest;
|
|
var testPromise = new Promise(resolve => nextTest = resolve#);
|
|
async function main() {
|
|
|
|
break at:
|
|
}
|
|
#main();
|
|
return testPromise;
|
|
|
|
break at:
|
|
}
|
|
#setTimeout(returnCall, 0);
|
|
await foo();
|
|
|
|
break at:
|
|
setTimeout(returnCall, 0);
|
|
#await foo();
|
|
await foo();
|
|
|
|
break at:
|
|
setTimeout(returnCall, 0);
|
|
await #foo();
|
|
await foo();
|
|
|
|
break at:
|
|
var resolveNested;
|
|
var p = #new Promise(resolve => resolveNested = resolve);
|
|
setTimeout(resolveNested, 0);
|
|
|
|
break at:
|
|
var resolveNested;
|
|
var p = new Promise(resolve => resolveNested #= resolve);
|
|
setTimeout(resolveNested, 0);
|
|
|
|
break at:
|
|
var resolveNested;
|
|
var p = new Promise(resolve => resolveNested = resolve#);
|
|
setTimeout(resolveNested, 0);
|
|
|
|
break at:
|
|
var p = new Promise(resolve => resolveNested = resolve);
|
|
#setTimeout(resolveNested, 0);
|
|
await p;
|
|
|
|
break at:
|
|
setTimeout(resolveNested, 0);
|
|
#await p;
|
|
}
|
|
|
|
break at:
|
|
setTimeout(resolveNested, 0);
|
|
await #p;
|
|
}
|
|
|
|
break at:
|
|
setTimeout(resolveNested, 0);
|
|
#await p;
|
|
}
|
|
|
|
break at:
|
|
var resolveNested;
|
|
var p = #new Promise(resolve => resolveNested = resolve);
|
|
setTimeout(resolveNested, 0);
|
|
|
|
break at:
|
|
var resolveNested;
|
|
var p = new Promise(resolve => resolveNested #= resolve);
|
|
setTimeout(resolveNested, 0);
|
|
|
|
break at:
|
|
var resolveNested;
|
|
var p = new Promise(resolve => resolveNested = resolve#);
|
|
setTimeout(resolveNested, 0);
|
|
|
|
break at:
|
|
var p = new Promise(resolve => resolveNested = resolve);
|
|
#setTimeout(resolveNested, 0);
|
|
await p;
|
|
|
|
break at:
|
|
setTimeout(resolveNested, 0);
|
|
#await p;
|
|
}
|
|
|
|
break at:
|
|
setTimeout(resolveNested, 0);
|
|
await #p;
|
|
}
|
|
|
|
break at:
|
|
setTimeout(resolveNested, 0);
|
|
#await p;
|
|
}
|
|
|
|
|
|
Running test: testPromiseComplex
|
|
break at:
|
|
var nextTest;
|
|
var testPromise = #new Promise(resolve => nextTest = resolve);
|
|
async function main() {
|
|
|
|
break at:
|
|
var nextTest;
|
|
var testPromise = new Promise(resolve => nextTest #= resolve);
|
|
async function main() {
|
|
|
|
break at:
|
|
var nextTest;
|
|
var testPromise = new Promise(resolve => nextTest = resolve#);
|
|
async function main() {
|
|
|
|
break at:
|
|
}
|
|
#main();
|
|
return testPromise;
|
|
|
|
break at:
|
|
}
|
|
var x = #1;
|
|
var y = 2;
|
|
|
|
break at:
|
|
var x = 1;
|
|
var y = #2;
|
|
returnFunction(emptyFunction(), x++, --y, x => 2 * x, returnCall())().a = await foo((a => 2 *a)(5));
|
|
|
|
break at:
|
|
var y = 2;
|
|
#returnFunction(emptyFunction(), x++, --y, x => 2 * x, returnCall())().a = await foo((a => 2 *a)(5));
|
|
nextTest();
|
|
|
|
break at:
|
|
|
|
function emptyFunction() {#}
|
|
|
|
|
|
break at:
|
|
var y = 2;
|
|
returnFunction(emptyFunction(), x++, --y, x => 2 * x, #returnCall())().a = await foo((a => 2 *a)(5));
|
|
nextTest();
|
|
|
|
break at:
|
|
function returnCall() {
|
|
#return return42();
|
|
}
|
|
|
|
break at:
|
|
function return42() {
|
|
#return 42;
|
|
}
|
|
|
|
break at:
|
|
return 42;
|
|
#}
|
|
|
|
|
|
break at:
|
|
return return42();
|
|
#}
|
|
|
|
|
|
break at:
|
|
var y = 2;
|
|
#returnFunction(emptyFunction(), x++, --y, x => 2 * x, returnCall())().a = await foo((a => 2 *a)(5));
|
|
nextTest();
|
|
|
|
break at:
|
|
function returnFunction() {
|
|
#return returnObject;
|
|
}
|
|
|
|
break at:
|
|
return returnObject;
|
|
#}
|
|
|
|
|
|
break at:
|
|
var y = 2;
|
|
returnFunction(emptyFunction(), x++, --y, x => 2 * x, returnCall())#().a = await foo((a => 2 *a)(5));
|
|
nextTest();
|
|
|
|
break at:
|
|
function returnObject() {
|
|
#return ({ foo: () => 42 });
|
|
}
|
|
|
|
break at:
|
|
return ({ foo: () => 42 });
|
|
#}
|
|
|
|
|
|
break at:
|
|
var y = 2;
|
|
returnFunction(emptyFunction(), x++, --y, x => 2 * x, returnCall())().a = await #foo((a => 2 *a)(5));
|
|
nextTest();
|
|
|
|
break at:
|
|
var y = 2;
|
|
returnFunction(emptyFunction(), x++, --y, x => 2 * x, returnCall())().a = await foo((a => 2 #*a)(5));
|
|
nextTest();
|
|
|
|
break at:
|
|
var y = 2;
|
|
returnFunction(emptyFunction(), x++, --y, x => 2 * x, returnCall())().a = await foo((a => 2 *a#)(5));
|
|
nextTest();
|
|
|
|
break at:
|
|
var y = 2;
|
|
returnFunction(emptyFunction(), x++, --y, x => 2 * x, returnCall())().a = await #foo((a => 2 *a)(5));
|
|
nextTest();
|
|
|
|
break at:
|
|
async function foo() {
|
|
#await Promise.resolve();
|
|
return 42;
|
|
|
|
break at:
|
|
async function foo() {
|
|
await Promise.#resolve();
|
|
return 42;
|
|
|
|
break at:
|
|
async function foo() {
|
|
#await Promise.resolve();
|
|
return 42;
|
|
|