blob: c16ae67d0fba40fdb637bb1c5a4ebccc0ff1266a [file] [log] [blame]
// 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.
function testEval() {
eval('// comment only');
eval('// comment only\n');
}
// function without return
function procedure() {
var a = 1;
var b = 2;
}
function testProcedure() {
procedure();
}
function returnTrue() {
return true;
}
function testIf() {
var a;
if (true) a = true;
if (!a) {
a = true;
} else {
a = false;
}
if (returnTrue()) {
a = false;
} else {
a = true;
}
}
function emptyFunction() {}
function testEmptyFunction() {
emptyFunction();
}
function twoArguments(a1, a2) {
}
function testCallArguments() {
twoArguments(emptyFunction(), emptyFunction());
}
function testNested() {
function nested1() {
function nested2() {
function nested3() {
}
nested3();
return;
}
return nested2();
}
nested1();
}
function return42() {
return 42;
}
function returnCall() {
return return42();
}
function testCallAtReturn() {
return returnCall();
}
function returnObject() {
return ({ foo: () => 42 });
}
function testWith() {
with (returnObject()) {
foo();
}
with({}) {
return;
}
}
function testForLoop() {
for (var i = 0; i < 1; ++i) {}
for (var i = 0; i < 1; ++i) i;
for (var i = 0; i < 0; ++i) {}
}
function testForOfLoop() {
for (var k of []) {}
for (var k of [1]) k;
var a = [];
for (var k of a) {}
}
function testForInLoop() {
var o = {};
for (var k in o) {}
for (var k in o) k;
for (var k in { a:1 }) {}
for (var k in { a:1 }) k;
}
function testSimpleExpressions() {
1 + 2 + 3;
var a = 1;
++a;
a--;
}
Object.defineProperty(this, 'getterFoo', {
get: () => return42
});
function testGetter() {
getterFoo();
}
var obj = {
foo: () => ({
boo: () => return42
})
};
function testChainedCalls() {
obj.foo().boo()();
}
function testChainedWithNative() {
Array.from([1]).concat([2]).map(v => v * 2);
}
function testPromiseThen() {
return Promise.resolve().then(v => v * 2).then(v => v * 2);
}
function testSwitch() {
for (var i = 0; i < 3; ++i) {
switch(i) {
case 0: continue;
case 1: return42(); break;
default: return;
}
}
}
function* idMaker() {
yield 1;
yield 2;
yield 3;
}
function testGenerator() {
var gen = idMaker();
return42();
gen.next().value;
debugger;
gen.next().value;
return42();
gen.next().value;
return42();
gen.next().value;
}
function throwException() {
throw new Error();
}
function testCaughtException() {
try {
throwException()
} catch (e) {
return;
}
}
function testClasses() {
class Cat {
constructor(name) {
this.name = name;
}
speak() {
}
}
class Lion extends Cat {
constructor(name) {
super(name);
}
speak() {
super.speak();
}
}
new Lion().speak();
}
async function asyncFoo() {
await Promise.resolve().then(v => v * 2);
return42();
await asyncBoo();
}
async function asyncBoo() {
await Promise.resolve();
}
async function testAsyncAwait() {
await asyncFoo();
await awaitBoo();
}
// TODO(kozyatinskiy): fix this.
async function testPromiseAsyncWithCode() {
var nextTest;
var testPromise = new Promise(resolve => nextTest = resolve);
async function main() {
async function foo() {
var resolveNested;
var p = new Promise(resolve => resolveNested = resolve);
setTimeout(resolveNested, 0);
await p;
}
setTimeout(returnCall, 0);
await foo();
await foo();
nextTest();
}
main();
return testPromise;
}
function returnFunction() {
return returnObject;
}
async function testPromiseComplex() {
var nextTest;
var testPromise = new Promise(resolve => nextTest = resolve);
async function main() {
async function foo() {
await Promise.resolve();
return 42;
}
var x = 1;
var y = 2;
returnFunction(emptyFunction(), x++, --y, x => 2 * x, returnCall())().a = await foo((a => 2 *a)(5));
nextTest();
}
main();
return testPromise;
}
function twiceDefined() {
return a + b;
}
function twiceDefined() {
return a + b;
}
//# sourceURL=break-locations.js