Tests evaluateOnCallFrame in module.

Running test: testTotal
foo1 (module1:7:2)
foo2 (module2:6:9)
(anonymous) (module3:4:0)
local:foo1
[
    [0] : c1 = 12
    [1] : g1 = 2
]
module
[
    [0] : a1 = 10
    [1] : g1 = 1
    [2] : b1 = 11
    [3] : foo1 = function foo1() {   let c1 = 12;   let g1 = 2;   debugger;   return a1 + b1 + c1 + g1; }
]
global
[
  ...
]
Check variables in frame#0
  let g1 = 2;
  #debugger;
  return a1 + b1 + c1 + g1;

Array = 
{
    className : Function
    description : function Array() { [native code] }
    objectId : <objectId>
    type : function
}
c1 = 
{
    description : 12
    type : number
    value : 12
}
Evaluating: ++c1
updated c1 = 
{
    description : 13
    type : number
    value : 13
}
Evaluating: --c1
g1 = 
{
    description : 2
    type : number
    value : 2
}
Evaluating: ++g1
updated g1 = 
{
    description : 3
    type : number
    value : 3
}
Evaluating: --g1
a1 = 
{
    description : 10
    type : number
    value : 10
}
Evaluating: ++a1
updated a1 = 
{
    description : 11
    type : number
    value : 11
}
Evaluating: --a1
b1 = 
{
    description : 11
    type : number
    value : 11
}
Evaluating: ++b1
updated b1 = 
{
    description : 12
    type : number
    value : 12
}
Evaluating: --b1
foo1 = 
{
    className : Function
    description : function foo1() {   let c1 = 12;   let g1 = 2;   debugger;   return a1 + b1 + c1 + g1; }
    objectId : <objectId>
    type : function
}
local:foo2
[
    [0] : c2 = 22
]
module
[
    [0] : a2 = 20
    [1] : foo1 = function foo1() {   let c1 = 12;   let g1 = 2;   debugger;   return a1 + b1 + c1 + g1; }
    [2] : b2 = 21
    [3] : foo2 = function foo2() {   let c2 = 22;   return foo1() + a2 + b2 + c2; }
]
global
[
  ...
]
Check variables in frame#1
  let c2 = 22;
  return #foo1() + a2 + b2 + c2;
}

Array = 
{
    className : Function
    description : function Array() { [native code] }
    objectId : <objectId>
    type : function
}
c2 = 
{
    description : 22
    type : number
    value : 22
}
Evaluating: ++c2
updated c2 = 
{
    description : 23
    type : number
    value : 23
}
Evaluating: --c2
a2 = 
{
    description : 20
    type : number
    value : 20
}
Evaluating: ++a2
updated a2 = 
{
    description : 21
    type : number
    value : 21
}
Evaluating: --a2
foo1 = 
{
    className : Function
    description : function foo1() {   let c1 = 12;   let g1 = 2;   debugger;   return a1 + b1 + c1 + g1; }
    objectId : <objectId>
    type : function
}
b2 = 
{
    description : 21
    type : number
    value : 21
}
Evaluating: ++b2
updated b2 = 
{
    description : 22
    type : number
    value : 22
}
Evaluating: --b2
foo2 = 
{
    className : Function
    description : function foo2() {   let c2 = 22;   return foo1() + a2 + b2 + c2; }
    objectId : <objectId>
    type : function
}
module
[
    [0] : a3 = 30
    [1] : foo2 = function foo2() {   let c2 = 22;   return foo1() + a2 + b2 + c2; }
    [2] : b3 = 31
]
global
[
  ...
]
Check variables in frame#2
export let b3 = 31;
#foo2();


Array = 
{
    className : Function
    description : function Array() { [native code] }
    objectId : <objectId>
    type : function
}
a3 = 
{
    description : 30
    type : number
    value : 30
}
Evaluating: ++a3
updated a3 = 
{
    description : 31
    type : number
    value : 31
}
Evaluating: --a3
foo2 = 
{
    className : Function
    description : function foo2() {   let c2 = 22;   return foo1() + a2 + b2 + c2; }
    objectId : <objectId>
    type : function
}
b3 = 
{
    description : 31
    type : number
    value : 31
}
Evaluating: ++b3
updated b3 = 
{
    description : 32
    type : number
    value : 32
}
Evaluating: --b3

Running test: testAnother
(anonymous) (module4:5:13)
bar (module4:5:24)
(anonymous) (module4:7:0)
local
[
]
closure:bar
[
    [0] : a = 0
]
module
[
    [0] : a = 1
    [1] : b = 2
    [2] : bar = function bar() {   let a = 0;   (() => {a; debugger;})(); }
]
global
[
  ...
]
Check variables in frame#0
  let a = 0;
  (() => {a; #debugger;})();
};

Array = 
{
    className : Function
    description : function Array() { [native code] }
    objectId : <objectId>
    type : function
}
a = 
{
    description : 0
    type : number
    value : 0
}
Evaluating: ++a
updated a = 
{
    description : 1
    type : number
    value : 1
}
Evaluating: --a
b = 
{
    description : 2
    type : number
    value : 2
}
Evaluating: ++b
updated b = 
{
    description : 3
    type : number
    value : 3
}
Evaluating: --b
bar = 
{
    className : Function
    description : function bar() {   let a = 0;   (() => {a; debugger;})(); }
    objectId : <objectId>
    type : function
}
local:bar
[
    [0] : a = 0
]
module
[
    [0] : a = 1
    [1] : b = 2
    [2] : bar = function bar() {   let a = 0;   (() => {a; debugger;})(); }
]
global
[
  ...
]
Check variables in frame#1
  let a = 0;
  (() => {a; debugger;})#();
};

Array = 
{
    className : Function
    description : function Array() { [native code] }
    objectId : <objectId>
    type : function
}
a = 
{
    description : 0
    type : number
    value : 0
}
Evaluating: ++a
updated a = 
{
    description : 1
    type : number
    value : 1
}
Evaluating: --a
b = 
{
    description : 2
    type : number
    value : 2
}
Evaluating: ++b
updated b = 
{
    description : 3
    type : number
    value : 3
}
Evaluating: --b
bar = 
{
    className : Function
    description : function bar() {   let a = 0;   (() => {a; debugger;})(); }
    objectId : <objectId>
    type : function
}
module
[
    [0] : a = 1
    [1] : b = 2
    [2] : bar = function bar() {   let a = 0;   (() => {a; debugger;})(); }
]
global
[
  ...
]
Check variables in frame#2
};
#bar();

Array = 
{
    className : Function
    description : function Array() { [native code] }
    objectId : <objectId>
    type : function
}
a = 
{
    description : 1
    type : number
    value : 1
}
Evaluating: ++a
updated a = 
{
    description : 2
    type : number
    value : 2
}
Evaluating: --a
b = 
{
    description : 2
    type : number
    value : 2
}
Evaluating: ++b
updated b = 
{
    description : 3
    type : number
    value : 3
}
Evaluating: --b
bar = 
{
    className : Function
    description : function bar() {   let a = 0;   (() => {a; debugger;})(); }
    objectId : <objectId>
    type : function
}

Running test: testDifferentModuleVariables
(anonymous) (module5:5:0)
module
[
    [0] : b2 = 21
    [1] : a = 0
    [2] : b = 0
    [3] : c = 0
]
global
[
  ...
]
Check variables in frame#0
export var c = 0;
#debugger;


Array = 
{
    className : Function
    description : function Array() { [native code] }
    objectId : <objectId>
    type : function
}
b2 = 
{
    description : 21
    type : number
    value : 21
}
Evaluating: ++b2
updated b2 = 
{
    description : 21
    type : number
    value : 21
}
Evaluating: --b2
a = 
{
    description : 0
    type : number
    value : 0
}
Evaluating: ++a
updated a = 
{
    description : 0
    type : number
    value : 0
}
Evaluating: --a
b = 
{
    description : 0
    type : number
    value : 0
}
Evaluating: ++b
updated b = 
{
    description : 1
    type : number
    value : 1
}
Evaluating: --b
c = 
{
    description : 0
    type : number
    value : 0
}
Evaluating: ++c
updated c = 
{
    description : 1
    type : number
    value : 1
}
Evaluating: --c
