diff options
Diffstat (limited to 'deps/v8/test/mjsunit/debug-evaluate-locals-optimized-double.js')
-rw-r--r-- | deps/v8/test/mjsunit/debug-evaluate-locals-optimized-double.js | 174 |
1 files changed, 109 insertions, 65 deletions
diff --git a/deps/v8/test/mjsunit/debug-evaluate-locals-optimized-double.js b/deps/v8/test/mjsunit/debug-evaluate-locals-optimized-double.js index 8447df536d..7178661f25 100644 --- a/deps/v8/test/mjsunit/debug-evaluate-locals-optimized-double.js +++ b/deps/v8/test/mjsunit/debug-evaluate-locals-optimized-double.js @@ -1,4 +1,4 @@ -// Copyright 2008 the V8 project authors. All rights reserved. +// Copyright 2012 the V8 project authors. All rights reserved. // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: @@ -34,6 +34,27 @@ var exception = false; var testingConstructCall = false; +var input = [ + {a: 1, b: 2}, + {a: 3, b: 4}, + {a: 5, b: 6}, + {a: 7, b: 8}, + {a: 9, b: 10} +]; + +var expected = [ + { locals: {a0: 1.01, b0: 2.02}, args: { names: ["i", "x0", "y0"], values: [0, 3.03, 4.04] } }, + { locals: {a1: 3.03, b1: 4.04}, args: { names: ["i", "x1", "y1"], values: [1, 5.05, 6.06] } }, + { locals: {a2: 5.05, b2: 6.06}, args: { names: ["i"], values: [2] } }, + { locals: {a3: 7.07, b3: 8.08}, args: { names: ["i", "x3", "y3", "z3"], + values: [3, 9.09, 10.10, undefined] } + }, + { locals: {a4: 9.09, b4: 10.10}, args: { names: ["i", "x4", "y4"], values: [4, 11.11, 12.12] } } +]; + +function arraySum(arr) { + return arr.reduce(function (a, b) { return a + b; }, 0); +} function listener(event, exec_state, event_data, data) { try { @@ -44,42 +65,63 @@ function listener(event, exec_state, event_data, data) { for (var i = 0; i < exec_state.frameCount(); i++) { var frame = exec_state.frame(i); if (i < exec_state.frameCount() - 1) { - var expected_a = i * 2 + 1 + (i * 2 + 1) / 100; - var expected_b = i * 2 + 2 + (i * 2 + 2) / 100; - var expected_x = (i + 1) * 2 + 1 + ((i + 1) * 2 + 1) / 100; - var expected_y = (i + 1) * 2 + 2 + ((i + 1) * 2 + 2) / 100; - - // All frames except the bottom one has normal variables a and b. - var a = ('a' === frame.localName(0)) ? 0 : 1; - var b = 1 - a; - assertEquals('a', frame.localName(a)); - assertEquals('b', frame.localName(b)); - assertEquals(expected_a, frame.localValue(a).value()); - assertEquals(expected_b, frame.localValue(b).value()); - - // All frames except the bottom one has arguments variables x and y. - assertEquals('x', frame.argumentName(0)); - assertEquals('y', frame.argumentName(1)); - assertEquals(expected_x, frame.argumentValue(0).value()); - assertEquals(expected_y, frame.argumentValue(1).value()); + var expected_args = expected[i].args; + var expected_locals = expected[i].locals; + + // All frames except the bottom one have expected locals. + var locals = {}; + for (var j = 0; j < frame.localCount(); j++) { + locals[frame.localName(j)] = frame.localValue(j).value(); + } + assertPropertiesEqual(expected_locals, locals); + + // All frames except the bottom one have expected arguments. + for (var j = 0; j < expected_args.names.length; j++) { + assertEquals(expected_args.names[j], frame.argumentName(j)); + assertEquals(expected_args.values[j], frame.argumentValue(j).value()); + } // All frames except the bottom one have two scopes. assertEquals(2, frame.scopeCount()); assertEquals(debug.ScopeType.Local, frame.scope(0).scopeType()); assertEquals(debug.ScopeType.Global, frame.scope(1).scopeType()); - assertEquals(expected_a, frame.scope(0).scopeObject().value()['a']); - assertEquals(expected_b, frame.scope(0).scopeObject().value()['b']); - assertEquals(expected_x, frame.scope(0).scopeObject().value()['x']); - assertEquals(expected_y, frame.scope(0).scopeObject().value()['y']); + + Object.keys(expected_locals).forEach(function (name) { + assertEquals(expected_locals[name], frame.scope(0).scopeObject().value()[name]); + }); + + for (var j = 0; j < expected_args.names.length; j++) { + var arg_name = expected_args.names[j]; + var arg_value = expected_args.values[j]; + assertEquals(arg_value, frame.scope(0).scopeObject().value()[arg_name]); + } // Evaluate in the inlined frame. - assertEquals(expected_a, frame.evaluate('a').value()); - assertEquals(expected_x, frame.evaluate('x').value()); - assertEquals(expected_x, frame.evaluate('arguments[0]').value()); - assertEquals(expected_a + expected_b + expected_x + expected_y, - frame.evaluate('a + b + x + y').value()); - assertEquals(expected_x + expected_y, - frame.evaluate('arguments[0] + arguments[1]').value()); + Object.keys(expected_locals).forEach(function (name) { + assertEquals(expected_locals[name], frame.evaluate(name).value()); + }); + + for (var j = 0; j < expected_args.names.length; j++) { + var arg_name = expected_args.names[j]; + var arg_value = expected_args.values[j]; + assertEquals(arg_value, frame.evaluate(arg_name).value()); + assertEquals(arg_value, frame.evaluate('arguments['+j+']').value()); + } + + var expected_args_sum = arraySum(expected_args.values); + var expected_locals_sum = + arraySum(Object.keys(expected_locals). + map(function (k) { return expected_locals[k]; })); + + assertEquals(expected_locals_sum + expected_args_sum, + frame.evaluate(Object.keys(expected_locals).join('+') + ' + ' + + expected_args.names.join('+')).value()); + + var arguments_sum = expected_args.names.map(function(_, idx) { + return "arguments[" + idx + "]"; + }).join('+'); + assertEquals(expected_args_sum, + frame.evaluate(arguments_sum).value()); } else { // The bottom frame only have the global scope. assertEquals(1, frame.scopeCount()); @@ -121,62 +163,64 @@ function listener(event, exec_state, event_data, data) { listenerComplete = true; } } catch (e) { - exception = e + exception = e.toString() + e.stack; }; }; -f();f();f(); +for (var i = 0; i < 4; i++) f(input.length - 1, 11.11, 12.12); %OptimizeFunctionOnNextCall(f); -f(); +f(input.length - 1, 11.11, 12.12); // Add the debug event listener. Debug.setListener(listener); -function h(x, y) { - var a = 1; - var b = 2; - a = a + a / 100; - b = b + b / 100; +function h(i, x0, y0) { + var a0 = input[i].a; + var b0 = input[i].b; + a0 = a0 + a0 / 100; + b0 = b0 + b0 / 100; debugger; // Breakpoint. }; -function g3(x, y) { - var a = 3; - var b = 4; - a = a + a / 100; - b = b + b / 100; - h(a, b); - return a+b; +function g3(i, x1, y1) { + var a1 = input[i].a; + var b1 = input[i].b; + a1 = a1 + a1 / 100; + b1 = b1 + b1 / 100; + h(i - 1, a1, b1); + return a1+b1; }; -function g2(x, y) { - var a = 5; - var b = 6; - a = a + a / 100; - b = b + b / 100; - g3(a, b); +function g2(i) { + var a2 = input[i].a; + var b2 = input[i].b; + a2 = a2 + a2 / 100; + b2 = b2 + b2 / 100; + g3(i - 1, a2, b2); }; -function g1(x, y) { - var a = 7; - var b = 8; - a = a + a / 100; - b = b + b / 100; - g2(a, b); +function g1(i, x3, y3, z3) { + var a3 = input[i].a; + var b3 = input[i].b; + a3 = a3 + a3 / 100; + b3 = b3 + b3 / 100; + g2(i - 1, a3, b3); }; -function f(x, y) { - var a = 9; - var b = 10; - a = a + a / 100; - b = b + b / 100; - g1(a, b); +function f(i, x4, y4) { + var a4 = input[i].a; + var b4 = input[i].b; + a4 = a4 + a4 / 100; + b4 = b4 + b4 / 100; + g1(i - 1, a4, b4); }; // Test calling f normally and as a constructor. -f(11.11, 12.12); +f(input.length - 1, 11.11, 12.12); +f(input.length - 1, 11.11, 12.12, ""); testingConstructCall = true; -new f(11.11, 12.12); +new f(input.length - 1, 11.11, 12.12); +new f(input.length - 1, 11.11, 12.12, ""); // Make sure that the debug event listener vas invoked. assertFalse(exception, "exception in listener " + exception) |