Checks Debugger.getPossibleBreakpoints with ignoreNestedFunctions

Running test: testWholeFunction

function test() {
  |_|Array.|C|from([1,2]).|C|map(() => |_|1|R|).|C|filter(() => |_|true|R|);
  function nested1() {
    |_|Array.|C|from([1,2]).|C|map(() => |_|1|R|).|C|filter(() => |_|true|R|);
  |R|}
  function nested2() {
    |_|Array.|C|from([1,2]).|C|map(() => |_|1|R|).|C|filter(() => |_|true|R|);
  |R|}
  |C|nested1();
  |C|nested2();
|R|}


Running test: testWholeFunctionWithoutNested

function test() {
  |_|Array.|C|from([1,2]).|C|map(() => |_|1|R|).|C|filter(() => |_|true|R|);
  function nested1() {
    |_|Array.|C|from([1,2]).|C|map(() => |_|1|R|).|C|filter(() => |_|true|R|);
  |R|}
  function nested2() {
    |_|Array.|C|from([1,2]).|C|map(() => |_|1|R|).|C|filter(() => |_|true|R|);
  |R|}
  |C|nested1();
  |C|nested2();
|R|}


Running test: testPartOfFunctionWithoutNested

function test() {
  |_|Array.|C|from([1,2]).map(() => 1).filter(() => true);
  function nested1() {
    Array.from([1,2]).map(() => 1).filter(() => true);
  }
  function nested2() {
    Array.from([1,2]).map(() => 1).filter(() => true);
  }
  nested1();
  nested2();
}


Running test: testNestedFunction

function test() {
  Array.from([1,2]).map(() => 1).filter(() => true);
  function nested1() {
    |_|Array.|C|from([1,2]).|C|map(() => |_|1|R|).|C|filter(() => |_|true|R|);
  |R|}
  function nested2() {
    |_|Array.|C|from([1,2]).|C|map(() => |_|1|R|).|C|filter(() => |_|true|R|);
  |R|}
  |C|nested1();
  |C|nested2();
|R|}

Run test() to check breakpoints..
  }
  #nested1();
  nested2();

  function nested1() {
    #Array.from([1,2]).map(() => 1).filter(() => true);
  }

  function nested1() {
    Array.#from([1,2]).map(() => 1).filter(() => true);
  }

  function nested1() {
    Array.from([1,2]).#map(() => 1).filter(() => true);
  }

  function nested1() {
    Array.from([1,2]).map(() => #1).filter(() => true);
  }

  function nested1() {
    Array.from([1,2]).map(() => 1#).filter(() => true);
  }

  function nested1() {
    Array.from([1,2]).map(() => #1).filter(() => true);
  }

  function nested1() {
    Array.from([1,2]).map(() => 1#).filter(() => true);
  }

  function nested1() {
    Array.from([1,2]).map(() => 1).#filter(() => true);
  }

  function nested1() {
    Array.from([1,2]).map(() => 1).filter(() => #true);
  }

  function nested1() {
    Array.from([1,2]).map(() => 1).filter(() => true#);
  }

  function nested1() {
    Array.from([1,2]).map(() => 1).filter(() => #true);
  }

  function nested1() {
    Array.from([1,2]).map(() => 1).filter(() => true#);
  }

    Array.from([1,2]).map(() => 1).filter(() => true);
  #}
  function nested2() {

  nested1();
  #nested2();
}

  function nested2() {
    #Array.from([1,2]).map(() => 1).filter(() => true);
  }

  function nested2() {
    Array.#from([1,2]).map(() => 1).filter(() => true);
  }

  function nested2() {
    Array.from([1,2]).#map(() => 1).filter(() => true);
  }

  function nested2() {
    Array.from([1,2]).map(() => #1).filter(() => true);
  }

  function nested2() {
    Array.from([1,2]).map(() => 1#).filter(() => true);
  }

  function nested2() {
    Array.from([1,2]).map(() => #1).filter(() => true);
  }

  function nested2() {
    Array.from([1,2]).map(() => 1#).filter(() => true);
  }

  function nested2() {
    Array.from([1,2]).map(() => 1).#filter(() => true);
  }

  function nested2() {
    Array.from([1,2]).map(() => 1).filter(() => #true);
  }

  function nested2() {
    Array.from([1,2]).map(() => 1).filter(() => true#);
  }

  function nested2() {
    Array.from([1,2]).map(() => 1).filter(() => #true);
  }

  function nested2() {
    Array.from([1,2]).map(() => 1).filter(() => true#);
  }

    Array.from([1,2]).map(() => 1).filter(() => true);
  #}
  nested1();

  nested2();
#}

