Stepping with natives and frameworks.

Running test: testNativeCodeStepOut
Debugger.pause called
#[1,2].map(v => v);

Debugger.stepInto called
[1,2].map(v => #v);

Debugger.stepOut called
[1,2].map(v => v);#

Debugger.resume called

Running test: testNativeCodeStepOver
Debugger.pause called
#[1,2].map(v => v);

Debugger.stepInto called
[1,2].map(v => #v);

Debugger.stepOver called
[1,2].map(v => v#);

Debugger.stepOver called
[1,2].map(v => #v);

Debugger.stepOver called
[1,2].map(v => v#);

Debugger.stepOver called
[1,2].map(v => v);#

Debugger.resume called

Running test: testNativeCodeStepInto
Debugger.pause called
#[1,2].map(v => v);

Debugger.stepInto called
[1,2].map(v => #v);

Debugger.stepInto called
[1,2].map(v => v#);

Debugger.stepInto called
[1,2].map(v => #v);

Debugger.stepInto called
[1,2].map(v => v#);

Debugger.stepInto called
[1,2].map(v => v);#

Debugger.resume called

Running test: testFrameworkCodeStepInto
Debugger.pause called
#callAll(() => 1, () => 2);

Debugger.stepInto called
callAll(() => #1, () => 2);

Debugger.stepInto called
callAll(() => 1#, () => 2);

Debugger.stepInto called
callAll(() => 1, () => #2);

Debugger.stepInto called
callAll(() => 1, () => 2#);

Debugger.stepInto called
callAll(() => 1, () => 2);#

Debugger.resume called

Running test: testFrameworkCodeStepOver
Debugger.pause called
#callAll(() => 1, () => 2);

Debugger.stepInto called
callAll(() => #1, () => 2);

Debugger.stepOver called
callAll(() => 1#, () => 2);

Debugger.stepOver called
callAll(() => 1, () => #2);

Debugger.stepOver called
callAll(() => 1, () => 2#);

Debugger.stepOver called
callAll(() => 1, () => 2);#

Debugger.resume called

Running test: testFrameworkCodeStepOut
Debugger.pause called
#callAll(() => 1, () => 2);

Debugger.stepInto called
callAll(() => #1, () => 2);

Debugger.stepOut called
callAll(() => 1, () => #2);

Debugger.stepOut called
callAll(() => 1, () => 2);#

Debugger.resume called

Running test: testFrameworkNextCallDeeperStepOut
Debugger.pause called
#callAll(() => 1, callAll.bind(null, () => 2));

Debugger.stepInto called
callAll(() => #1, callAll.bind(null, () => 2));

Debugger.stepOut called
callAll(() => 1, callAll.bind(null, () => #2));

Debugger.stepOut called
callAll(() => 1, callAll.bind(null, () => 2));#

Debugger.resume called

Running test: testFrameworkNextCallDeeperStepOutSameFunction
Debugger.pause called
#callAll(foo, callAll.bind(null, foo));

Debugger.stepInto called
foo = () => #1

Debugger.stepOut called
callAll(foo, callAll.bind(null, foo));#

Debugger.resume called

Running test: testFrameworkNextCallDeeperStepInto
Debugger.pause called
#callAll(() => 1, callAll.bind(null, () => 2));

Debugger.stepInto called
callAll(() => #1, callAll.bind(null, () => 2));

Debugger.stepOver called
callAll(() => 1#, callAll.bind(null, () => 2));

Debugger.stepOver called
callAll(() => 1, callAll.bind(null, () => #2));

Debugger.stepOver called
callAll(() => 1, callAll.bind(null, () => 2#));

Debugger.stepOver called
callAll(() => 1, callAll.bind(null, () => 2));#

Debugger.resume called

Running test: testFrameworkNextCallDeeperStepOver
Debugger.pause called
#callAll(() => 1, callAll.bind(null, () => 2));

Debugger.stepInto called
callAll(() => #1, callAll.bind(null, () => 2));

Debugger.stepOver called
callAll(() => 1#, callAll.bind(null, () => 2));

Debugger.stepOver called
callAll(() => 1, callAll.bind(null, () => #2));

Debugger.stepOver called
callAll(() => 1, callAll.bind(null, () => 2#));

Debugger.stepOver called
callAll(() => 1, callAll.bind(null, () => 2));#

Debugger.resume called

Running test: testFrameworkCurrentCallDeeperStepOut
Debugger.pause called
#callAll(callAll.bind(null, () => 1), () => 2);

Debugger.stepInto called
callAll(callAll.bind(null, () => #1), () => 2);

Debugger.stepOut called
callAll(callAll.bind(null, () => 1), () => #2);

Debugger.stepOut called
callAll(callAll.bind(null, () => 1), () => 2);#

Debugger.resume called

Running test: testFrameworkCurrentCallDeeperStepOutSameFunction
Debugger.pause called
#callAll(callAll.bind(null, foo), foo);

Debugger.stepInto called
foo = () => #1

Debugger.stepOut called
callAll(callAll.bind(null, foo), foo);#

Debugger.resume called

Running test: testFrameworkCurrentCallDeeperStepOver
Debugger.pause called
#callAll(callAll.bind(null, () => 1), () => 2);

Debugger.stepInto called
callAll(callAll.bind(null, () => #1), () => 2);

Debugger.stepOver called
callAll(callAll.bind(null, () => 1#), () => 2);

Debugger.stepOver called
callAll(callAll.bind(null, () => 1), () => #2);

Debugger.stepOver called
callAll(callAll.bind(null, () => 1), () => 2#);

Debugger.stepOver called
callAll(callAll.bind(null, () => 1), () => 2);#

Debugger.resume called

Running test: testFrameworkCurrentCallDeeperStepInto
Debugger.pause called
#callAll(callAll.bind(null, () => 1), () => 2);

Debugger.stepInto called
callAll(callAll.bind(null, () => #1), () => 2);

Debugger.stepInto called
callAll(callAll.bind(null, () => 1#), () => 2);

Debugger.stepInto called
callAll(callAll.bind(null, () => 1), () => #2);

Debugger.stepInto called
callAll(callAll.bind(null, () => 1), () => 2#);

Debugger.stepInto called
callAll(callAll.bind(null, () => 1), () => 2);#

Debugger.resume called

Running test: testFrameworkStepOverMixed
Debugger.pause called
#callAll(foo, foo, () => 2);

Debugger.stepInto called
foo = () => #1

Debugger.stepOver called
foo = () => 1#

Debugger.stepOver called
foo = () => #1

Debugger.stepOver called
foo = () => 1#

Debugger.stepOver called
callAll(foo, foo, () => #2);

Debugger.stepOver called
callAll(foo, foo, () => 2#);

Debugger.stepOver called
callAll(foo, foo, () => 2);#

Debugger.resume called

Running test: testFrameworkStepOutMixed
Debugger.pause called
#callAll(foo, foo, () => 2);

Debugger.stepInto called
foo = () => #1

Debugger.stepOut called
callAll(foo, foo, () => #2);

Debugger.stepOut called
callAll(foo, foo, () => 2);#

Debugger.resume called

Running test: testStepOutFrameworkSameFunctionAtReturn
Debugger.pause called
#callAll(foo, foo, () => 2);

Debugger.stepInto called
foo = () => #1

Debugger.stepOver called
foo = () => 1#

Debugger.stepOut called
callAll(foo, foo, () => #2);

Debugger.stepOut called
callAll(foo, foo, () => 2);#

Debugger.resume called
