Break locations around function calls

Running test: testFunctionCallAsArgument
Break locations in expression:
function test() {
|C|foo2(|C|foo1())
}

Breakpoint at:
function test() {
#foo2(foo1())
}

Break at:
function test() {
#foo2(foo1())
}

Debugger.stepInto called

function foo1() {#}
function foo2() {}

Breakpoint at:
function test() {
foo2(#foo1())
}

Break at:
function test() {
foo2(#foo1())
}

Debugger.stepInto called

function foo1() {#}
function foo2() {}

Breakpoint at expression line.
function test() {
#foo2(foo1())
}

Debugger.stepInto called

function foo1() {#}
function foo2() {}


Running test: testFunctionCallAsArgument
Break locations in expression:
function test() {
|C|foo2(|C|foo1());
}

Breakpoint at:
function test() {
#foo2(foo1());
}

Break at:
function test() {
#foo2(foo1());
}

Debugger.stepInto called

function foo1() {#}
function foo2() {}

Breakpoint at:
function test() {
foo2(#foo1());
}

Break at:
function test() {
foo2(#foo1());
}

Debugger.stepInto called

function foo1() {#}
function foo2() {}

Breakpoint at expression line.
function test() {
#foo2(foo1());
}

Debugger.stepInto called

function foo1() {#}
function foo2() {}


Running test: testFunctionCallAsArguments
Break locations in expression:
function test() {
|C|foo3(|C|foo1(), |C|foo2());
}

Breakpoint at:
function test() {
#foo3(foo1(), foo2());
}

Break at:
function test() {
#foo3(foo1(), foo2());
}

Debugger.stepInto called

function foo1() {#}
function foo2() {}

Breakpoint at:
function test() {
foo3(#foo1(), foo2());
}

Break at:
function test() {
foo3(#foo1(), foo2());
}

Debugger.stepInto called

function foo1() {#}
function foo2() {}

Breakpoint at:
function test() {
foo3(foo1(), #foo2());
}

Break at:
function test() {
foo3(foo1(), #foo2());
}

Debugger.stepInto called
function foo1() {}
function foo2() {#}
function foo3() {}

Breakpoint at expression line.
function test() {
#foo3(foo1(), foo2());
}

Debugger.stepInto called

function foo1() {#}
function foo2() {}


Running test: testFunctionCallInBinaryExpression
Break locations in expression:
function test() {
|C|foo3(|C|foo1() + |C|foo2());
}

Breakpoint at:
function test() {
#foo3(foo1() + foo2());
}

Break at:
function test() {
#foo3(foo1() + foo2());
}

Debugger.stepInto called

function foo1() {#}
function foo2() {}

Breakpoint at:
function test() {
foo3(#foo1() + foo2());
}

Break at:
function test() {
foo3(#foo1() + foo2());
}

Debugger.stepInto called

function foo1() {#}
function foo2() {}

Breakpoint at:
function test() {
foo3(foo1() + #foo2());
}

Break at:
function test() {
foo3(foo1() + #foo2());
}

Debugger.stepInto called
function foo1() {}
function foo2() {#}
function foo3() {}

Breakpoint at expression line.
function test() {
#foo3(foo1() + foo2());
}

Debugger.stepInto called

function foo1() {#}
function foo2() {}

