| // Copyright 2015 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. |
| |
| function counter() { |
| var i = 100; |
| return function() { |
| if (i-- > 0) return i; |
| throw "done"; |
| } |
| } |
| |
| var c1 = counter(); |
| var c2 = counter(); |
| |
| var f = (function() { |
| "use asm"; |
| return function f(i) { |
| i = i|0; |
| do { |
| if (i > 0) c1(); |
| else c2(); |
| } while (true); |
| } |
| })(); |
| |
| assertThrows(function() { f(0); }); |
| assertThrows(function() { f(1); }); |
| |
| var c3 = counter(); |
| |
| var g = (function() { |
| "use asm"; |
| return function g(i) { |
| i = i + 1; |
| do { |
| i = c3(i); |
| } while (true); |
| } |
| })(); |
| |
| assertThrows(function() { g(0); }); |
| assertThrows(function() { g(1); }); |