| // 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 |