Index: test/debugger/debug/debug-evaluate-no-side-effect-control.js |
diff --git a/test/debugger/debug/debug-evaluate-no-side-effect-control.js b/test/debugger/debug/debug-evaluate-no-side-effect-control.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..09b74d9d6f6ee003e5fa63e2cd32df1a84499649 |
--- /dev/null |
+++ b/test/debugger/debug/debug-evaluate-no-side-effect-control.js |
@@ -0,0 +1,108 @@ |
+// Copyright 2017 the V8 project authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+// Flags: --ignition --side-effect-free-debug-evaluate |
+ |
+Debug = debug.Debug |
+ |
+var exception = null; |
+ |
+var o = { p : 1 }; |
+ |
+var successes = [ |
+ [45, |
+ `(function() { |
+ var sum = 0; |
+ for (var i = 0; i < 10; i++) sum += i; |
+ return sum; |
+ })()` |
+ ], |
+ ["0012", |
+ `(function() { |
+ var sum = 0; |
+ for (var i in [1, 2, 3]) sum += i; |
+ return sum; |
+ })()` |
+ ], |
+ [15, |
+ `(function() { |
+ var sum = 1; |
+ while (sum < 12) sum += sum + 1; |
+ return sum; |
+ })()` |
+ ], |
+ [15, |
+ `(function() { |
+ var sum = 1; |
+ do { sum += sum + 1; } while (sum < 12); |
+ return sum; |
+ })()` |
+ ], |
+ ["023", |
+ `(function() { |
+ var sum = ""; |
+ for (var i = 0; i < 4; i++) { |
+ switch (i) { |
+ case 0: |
+ case 1: |
+ if (i == 0) sum += i; |
+ break; |
+ default: |
+ case 3: |
+ sum += i; |
+ break; |
+ } |
+ } |
+ return sum; |
+ })()` |
+ ], |
+ ["oups", |
+ `(function() { |
+ try { |
+ if (Math.sin(1) < 1) throw new Error("oups"); |
+ } catch (e) { |
+ return e.message; |
+ } |
+ })()` |
+ ], |
+]; |
+ |
+var fails = [ |
+ `(function() { // Iterator.prototype.next performs stores. |
+ var sum = 0; |
+ for (let i of [1, 2, 3]) sum += i; |
+ return sum; |
+ })()`, |
+ `(function() { // Store to scope object. |
+ with (o) { |
+ p = 2; |
+ } |
+ })()`, |
+]; |
+ |
+function listener(event, exec_state, event_data, data) { |
+ if (event != Debug.DebugEvent.Break) return; |
+ try { |
+ successes.forEach(function ([expectation, source]) { |
+ assertEquals(expectation, exec_state.frame(0).evaluate(source).value()); |
+ }); |
+ fails.forEach(function (test) { |
+ assertThrows(() => exec_state.frame(0).evaluate(test), EvalError); |
+ }); |
+ } catch (e) { |
+ exception = e; |
+ print(e, e.stack); |
+ }; |
+}; |
+ |
+// Add the debug event listener. |
+Debug.setListener(listener); |
+ |
+function f() { |
+ debugger; |
+}; |
+ |
+f(); |
+ |
+assertNull(exception); |