Index: test/mjsunit/compiler/osr-block-scope.js |
diff --git a/test/mjsunit/compiler/osr-block-scope.js b/test/mjsunit/compiler/osr-block-scope.js |
index f67eb9deddc641fecd78b800e70b63a29825c863..0d78cdcb644cfa91b2aba12af6a1f82b3eadd09b 100644 |
--- a/test/mjsunit/compiler/osr-block-scope.js |
+++ b/test/mjsunit/compiler/osr-block-scope.js |
@@ -6,12 +6,41 @@ |
"use strict"; |
+function nest(body, name, depth) { |
+ var header = ""; |
+ for (var i = 0; i < depth; i++) { |
+ var x = "x" + (i + 1); |
+ header += " for(var " + x + " = 0; " + x + " < 2; " + x + " = " + x + " + 1 | 0) {\n"; |
+ body = body + "}" |
+ } |
+ |
+ return body.replace(new RegExp("function " + name + "\\(\\) {"), |
+ "function " + name + "_" + x + "() {\n" + header); |
+} |
+ |
+function test(expected, func, depth) { |
+ assertEquals(expected, func()); |
+ assertEquals(expected, func()); |
+ assertEquals(expected, func()); |
+ |
+ var orig = func.toString(); |
+ var name = func.name; |
+ for (var depth = 1; depth < 4; depth++) { |
+ var body = nest(orig, name, depth); |
+ func = eval("(" + body + ")"); |
+ |
+ assertEquals(expected, func()); |
+ assertEquals(expected, func()); |
+ assertEquals(expected, func()); |
+ } |
+} |
+ |
function foo() { |
var result; |
{ |
let sum = 0; |
- for (var i = 0; i < 100; i++) { |
- if (i == 50) %OptimizeOsr(); |
+ for (var i = 0; i < 10; i++) { |
+ %OptimizeOsr(); |
sum += i; |
} |
result = sum; |
@@ -19,23 +48,69 @@ function foo() { |
return result; |
} |
-assertEquals(4950, foo()); |
-assertEquals(4950, foo()); |
-assertEquals(4950, foo()); |
+test(45, foo); |
function bar() { |
- var result; |
+ let sum = 0; |
+ for (var i = 0; i < 10; i++) { |
+ %OptimizeOsr(); |
+ sum += i; |
+ } |
+ return sum; |
+} |
+ |
+test(45, bar); |
+ |
+function bon() { |
{ |
let sum = 0; |
- for (let i = 0; i < 90; i++) { |
+ for (var i = 0; i < 10; i++) { |
+ if (i == 5) %OptimizeOsr(); |
sum += i; |
- if (i == 45) %OptimizeOsr(); |
} |
- result = sum; |
+ return sum; |
+ } |
+} |
+ |
+test(45, bon); |
+ |
+function row() { |
+ var i = 0; |
+ { |
+ let sum = 0; |
+ while (true) { |
+ if (i == 8) return sum; |
+ %OptimizeOsr(); |
+ sum = i; |
+ i = i + 1 | 0; |
+ } |
+ } |
+ return 11; |
+} |
+ |
+test(7, row); |
+ |
+function nub() { |
+ let i = 0; |
+ while (i < 2) { |
+ %OptimizeOsr(); |
+ i++; |
+ } |
+ return i; |
+} |
+ |
+test(2, nub); |
+ |
+function kub() { |
+ var result = 0; |
+ let i = 0; |
+ while (i < 2) { |
+ let x = i; |
+ %OptimizeOsr(); |
+ i++; |
+ result = x; |
} |
return result; |
} |
-assertEquals(4005, bar()); |
-assertEquals(4005, bar()); |
-assertEquals(4005, bar()); |
+test(1, kub); |