|  | // Copyright 2016 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: --allow-natives-syntax --lazy-inner-functions | 
|  |  | 
|  | // Test that the information on which variables to allocate in context doesn't | 
|  | // change when recompiling. | 
|  |  | 
|  | (function TestVarInInnerFunction() { | 
|  | // Introduce variables which would potentially be context allocated, depending | 
|  | // on whether an inner function refers to them or not. | 
|  | var a = 1; | 
|  | var b = 2; | 
|  | var c = 3; | 
|  | function inner() { | 
|  | var a; // This will make "a" actually not be context allocated. | 
|  | a; b; c; | 
|  | } | 
|  | // Force recompilation. | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | assertEquals(1, a); | 
|  | assertEquals(2, b); | 
|  | assertEquals(3, c); | 
|  | } | 
|  | })(); | 
|  |  | 
|  |  | 
|  | // Other tests are the same, except that the shadowing variable "a" in inner | 
|  | // functions is declared differently. | 
|  |  | 
|  | (function TestLetInInnerFunction() { | 
|  | var a = 1; | 
|  | var b = 2; | 
|  | var c = 3; | 
|  | function inner() { | 
|  | let a; | 
|  | a; b; c; | 
|  | } | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | assertEquals(1, a); | 
|  | assertEquals(2, b); | 
|  | assertEquals(3, c); | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestConstInInnerFunction() { | 
|  | var a = 1; | 
|  | var b = 2; | 
|  | var c = 3; | 
|  | function inner() { | 
|  | const a = 0; | 
|  | a; b; c; | 
|  | } | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | assertEquals(1, a); | 
|  | assertEquals(2, b); | 
|  | assertEquals(3, c); | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestInnerFunctionParameter() { | 
|  | var a = 1; | 
|  | var b = 2; | 
|  | var c = 3; | 
|  | function inner(a) { | 
|  | a; b; c; | 
|  | } | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | assertEquals(1, a); | 
|  | assertEquals(2, b); | 
|  | assertEquals(3, c); | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestInnerFunctionRestParameter() { | 
|  | var a = 1; | 
|  | var b = 2; | 
|  | var c = 3; | 
|  | function inner(...a) { | 
|  | a; b; c; | 
|  | } | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | assertEquals(1, a); | 
|  | assertEquals(2, b); | 
|  | assertEquals(3, c); | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestInnerFunctionDestructuredParameter_1() { | 
|  | var a = 1; | 
|  | var b = 2; | 
|  | var c = 3; | 
|  | function inner([d, a]) { | 
|  | a; b; c; | 
|  | } | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | assertEquals(1, a); | 
|  | assertEquals(2, b); | 
|  | assertEquals(3, c); | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestInnerFunctionDestructuredParameter_2() { | 
|  | var a = 1; | 
|  | var b = 2; | 
|  | var c = 3; | 
|  | function inner({d, a}) { | 
|  | a; b; c; | 
|  | } | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | assertEquals(1, a); | 
|  | assertEquals(2, b); | 
|  | assertEquals(3, c); | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestInnerArrowFunctionParameter() { | 
|  | var a = 1; | 
|  | var b = 2; | 
|  | var c = 3; | 
|  | (a) => { a; b; c; } | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | assertEquals(1, a); | 
|  | assertEquals(2, b); | 
|  | assertEquals(3, c); | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestInnerArrowFunctionRestParameter() { | 
|  | var a = 1; | 
|  | var b = 2; | 
|  | var c = 3; | 
|  | (...a) => { a; b; c; } | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | assertEquals(1, a); | 
|  | assertEquals(2, b); | 
|  | assertEquals(3, c); | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestInnerArrowFunctionDestructuredParameter_1() { | 
|  | var a = 1; | 
|  | var b = 2; | 
|  | var c = 3; | 
|  | ([d, a]) => { a; b; c; } | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | assertEquals(1, a); | 
|  | assertEquals(2, b); | 
|  | assertEquals(3, c); | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestInnerArrowFunctionDestructuredParameter_2() { | 
|  | var a = 1; | 
|  | var b = 2; | 
|  | var c = 3; | 
|  | ({d, a}) => { a; b; c;  } | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | assertEquals(1, a); | 
|  | assertEquals(2, b); | 
|  | assertEquals(3, c); | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestInnerInnerFunctionParameter() { | 
|  | var a = 1; | 
|  | var b = 2; | 
|  | var c = 3; | 
|  | function inner() { | 
|  | function innerinner(a) { a; b; c; } | 
|  | } | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | assertEquals(1, a); | 
|  | assertEquals(2, b); | 
|  | assertEquals(3, c); | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestInnerInnerFunctionRestParameter() { | 
|  | var a = 1; | 
|  | var b = 2; | 
|  | var c = 3; | 
|  | function inner() { | 
|  | function innerinner(...a) { a; b; c; } | 
|  | } | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | assertEquals(1, a); | 
|  | assertEquals(2, b); | 
|  | assertEquals(3, c); | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestInnerInnerFunctionDestructuredParameter_1() { | 
|  | var a = 1; | 
|  | var b = 2; | 
|  | var c = 3; | 
|  | function inner() { | 
|  | function innerinner({d, a}) { a; b; c; } | 
|  | } | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | assertEquals(1, a); | 
|  | assertEquals(2, b); | 
|  | assertEquals(3, c); | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestInnerInnerFunctionDestructuredParameter_2() { | 
|  | var a = 1; | 
|  | var b = 2; | 
|  | var c = 3; | 
|  | function inner() { | 
|  | function innerinner([d, a]) { a; b; c; } | 
|  | } | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | assertEquals(1, a); | 
|  | assertEquals(2, b); | 
|  | assertEquals(3, c); | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestInnerInnerArrowFunctionParameter() { | 
|  | var a = 1; | 
|  | var b = 2; | 
|  | var c = 3; | 
|  | function inner() { | 
|  | var f = a => a + b + c; | 
|  | } | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | assertEquals(1, a); | 
|  | assertEquals(2, b); | 
|  | assertEquals(3, c); | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestInnerInnerArrowFunctionRestParameter() { | 
|  | var a = 1; | 
|  | var b = 2; | 
|  | var c = 3; | 
|  | function inner() { | 
|  | var f = (...a) => a + b + c; | 
|  | } | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | assertEquals(1, a); | 
|  | assertEquals(2, b); | 
|  | assertEquals(3, c); | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestInnerInnerArrowFunctionDestructuredParameter_1() { | 
|  | var a = 1; | 
|  | var b = 2; | 
|  | var c = 3; | 
|  | function inner() { | 
|  | var f = ([d, a]) => a + b + c; | 
|  | } | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | assertEquals(1, a); | 
|  | assertEquals(2, b); | 
|  | assertEquals(3, c); | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestInnerInnerArrowFunctionDestructuredParameter_2() { | 
|  | var a = 1; | 
|  | var b = 2; | 
|  | var c = 3; | 
|  | function inner() { | 
|  | var f = ({d, a}) => a + b + c; | 
|  | } | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | assertEquals(1, a); | 
|  | assertEquals(2, b); | 
|  | assertEquals(3, c); | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestInnerFunctionInnerFunction() { | 
|  | var a = 1; | 
|  | var b = 2; | 
|  | var c = 3; | 
|  | function inner() { | 
|  | function a() { } | 
|  | a; b; c; | 
|  | } | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | assertEquals(1, a); | 
|  | assertEquals(2, b); | 
|  | assertEquals(3, c); | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestInnerFunctionSloppyBlockFunction() { | 
|  | var a = 1; | 
|  | var b = 2; | 
|  | var c = 3; | 
|  | function inner() { | 
|  | if (true) { function a() { } } | 
|  | a; b; c; | 
|  | } | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | assertEquals(1, a); | 
|  | assertEquals(2, b); | 
|  | assertEquals(3, c); | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestInnerFunctionCatchVariable() { | 
|  | var a = 1; | 
|  | var b = 2; | 
|  | var c = 3; | 
|  | function inner() { | 
|  | try { | 
|  | } | 
|  | catch(a) { | 
|  | a; b; c; | 
|  | } | 
|  | } | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | assertEquals(1, a); | 
|  | assertEquals(2, b); | 
|  | assertEquals(3, c); | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestInnerFunctionLoopVariable1() { | 
|  | var a = 1; | 
|  | var b = 2; | 
|  | var c = 3; | 
|  | function inner() { | 
|  | for (var a in {}) { | 
|  | a; b; c; | 
|  | } | 
|  | } | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | assertEquals(1, a); | 
|  | assertEquals(2, b); | 
|  | assertEquals(3, c); | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestInnerFunctionLoopVariable2() { | 
|  | var a = 1; | 
|  | var b = 2; | 
|  | var c = 3; | 
|  | function inner() { | 
|  | for (let a in {}) { | 
|  | a; b; c; | 
|  | } | 
|  | } | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | assertEquals(1, a); | 
|  | assertEquals(2, b); | 
|  | assertEquals(3, c); | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestInnerFunctionLoopVariable3() { | 
|  | var a = 1; | 
|  | var b = 2; | 
|  | var c = 3; | 
|  | function inner() { | 
|  | for (var a of []) { | 
|  | a; b; c; | 
|  | } | 
|  | } | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | assertEquals(1, a); | 
|  | assertEquals(2, b); | 
|  | assertEquals(3, c); | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestInnerFunctionLoopVariable4() { | 
|  | var a = 1; | 
|  | var b = 2; | 
|  | var c = 3; | 
|  | function inner() { | 
|  | for (let a of []) { | 
|  | a; b; c; | 
|  | } | 
|  | } | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | assertEquals(1, a); | 
|  | assertEquals(2, b); | 
|  | assertEquals(3, c); | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestInnerFunctionClass() { | 
|  | var a = 1; | 
|  | var b = 2; | 
|  | var c = 3; | 
|  | function inner() { | 
|  | class a {} | 
|  | a; b; c; | 
|  | } | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | assertEquals(1, a); | 
|  | assertEquals(2, b); | 
|  | assertEquals(3, c); | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestInnerFunctionDestructuring1() { | 
|  | var a = 1; | 
|  | var b = 2; | 
|  | var c = 3; | 
|  | function inner() { | 
|  | var [a, a2] = [1, 2]; | 
|  | a; b; c; | 
|  | } | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | assertEquals(1, a); | 
|  | assertEquals(2, b); | 
|  | assertEquals(3, c); | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestInnerFunctionDestructuring2() { | 
|  | var a = 1; | 
|  | var b = 2; | 
|  | var c = 3; | 
|  | function inner() { | 
|  | let [a, a2] = [1, 2]; | 
|  | a; b; c; | 
|  | } | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | assertEquals(1, a); | 
|  | assertEquals(2, b); | 
|  | assertEquals(3, c); | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestInnerFunctionDestructuring3() { | 
|  | var a = 1; | 
|  | var b = 2; | 
|  | var c = 3; | 
|  | function inner() { | 
|  | const [a, a2] = [1, 2]; | 
|  | a; b; c; | 
|  | } | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | assertEquals(1, a); | 
|  | assertEquals(2, b); | 
|  | assertEquals(3, c); | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestInnerFunctionDestructuring4() { | 
|  | var a = 1; | 
|  | var b = 2; | 
|  | var c = 3; | 
|  | function inner() { | 
|  | var [a2, ...a] = [1, 2]; | 
|  | a; b; c; | 
|  | } | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | assertEquals(1, a); | 
|  | assertEquals(2, b); | 
|  | assertEquals(3, c); | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestInnerFunctionDestructuring5() { | 
|  | var a = 1; | 
|  | var b = 2; | 
|  | var c = 3; | 
|  | function inner() { | 
|  | let [a2, ...a] = [1, 2]; | 
|  | a; b; c; | 
|  | } | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | assertEquals(1, a); | 
|  | assertEquals(2, b); | 
|  | assertEquals(3, c); | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestInnerFunctionDestructuring6() { | 
|  | var a = 1; | 
|  | var b = 2; | 
|  | var c = 3; | 
|  | function inner() { | 
|  | const [a2, ...a] = [1, 2]; | 
|  | a; b; c; | 
|  | } | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | assertEquals(1, a); | 
|  | assertEquals(2, b); | 
|  | assertEquals(3, c); | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestInnerFunctionDestructuring7() { | 
|  | var a = 1; | 
|  | var b = 2; | 
|  | var c = 3; | 
|  | function inner() { | 
|  | var {a, a2} = {a: 1, a2: 2}; | 
|  | a; b; c; | 
|  | } | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | assertEquals(1, a); | 
|  | assertEquals(2, b); | 
|  | assertEquals(3, c); | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestInnerFunctionDestructuring8() { | 
|  | var a = 1; | 
|  | var b = 2; | 
|  | var c = 3; | 
|  | function inner() { | 
|  | let {a, a2} = {a: 1, a2: 2}; | 
|  | a; b; c; | 
|  | } | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | assertEquals(1, a); | 
|  | assertEquals(2, b); | 
|  | assertEquals(3, c); | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestInnerFunctionDestructuring9() { | 
|  | var a = 1; | 
|  | var b = 2; | 
|  | var c = 3; | 
|  | function inner() { | 
|  | const {a, a2} = {a: 1, a2: 2}; | 
|  | a; b; c; | 
|  | } | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | assertEquals(1, a); | 
|  | assertEquals(2, b); | 
|  | assertEquals(3, c); | 
|  | } | 
|  | })(); | 
|  |  | 
|  | // A cluster of similar tests where the inner function only declares a variable | 
|  | // whose name clashes with an outer function variable name, but doesn't use it. | 
|  | (function TestRegress650969_1_var() { | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | var a; | 
|  | function inner() { | 
|  | var a; | 
|  | } | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestRegress650969_1_let() { | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | var a; | 
|  | function inner() { | 
|  | let a; | 
|  | } | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestRegress650969_2_var() { | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | var a; | 
|  | function inner() { | 
|  | var a = 6; | 
|  | } | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestRegress650969_2_let() { | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | var a; | 
|  | function inner() { | 
|  | let a = 6; | 
|  | } | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestRegress650969_2_const() { | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | var a; | 
|  | function inner() { | 
|  | const a = 6; | 
|  | } | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestRegress650969_3_var() { | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | var a; | 
|  | function inner() { | 
|  | var a, b; | 
|  | } | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestRegress650969_3_let() { | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | var a; | 
|  | function inner() { | 
|  | let a, b; | 
|  | } | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestRegress650969_4_var() { | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | var a; | 
|  | function inner() { | 
|  | var a = 6, b; | 
|  | } | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestRegress650969_4_let() { | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | var a; | 
|  | function inner() { | 
|  | let a = 6, b; | 
|  | } | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestRegress650969_4_const() { | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | var a; | 
|  | function inner() { | 
|  | const a = 0, b = 0; | 
|  | } | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestRegress650969_9_parameter() { | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | var a; | 
|  | function inner(a) {} | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestRegress650969_9_restParameter() { | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | var a; | 
|  | function inner(...a) {} | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestRegress650969_9_destructuredParameter_1() { | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | var a; | 
|  | function inner([d, a]) {} | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestRegress650969_9_destructuredParameter_2() { | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | var a; | 
|  | function inner({d, a}) {} | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestRegress650969_10_parameter() { | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | var a; | 
|  | function inner() { | 
|  | function innerinner(a) {} | 
|  | } | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestRegress650969_10_restParameter() { | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | var a; | 
|  | function inner() { | 
|  | function innerinner(...a) {} | 
|  | } | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestRegress650969_10_destructuredParameter_1() { | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | var a; | 
|  | function inner() { | 
|  | function innerinner([d, a]) {} | 
|  | } | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestRegress650969_10_destructuredParameter_2() { | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | var a; | 
|  | function inner() { | 
|  | function innerinner({d, a}) {} | 
|  | } | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestRegress650969_11_var() { | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | var a; | 
|  | function inner() { | 
|  | var [a, b] = [1, 2]; | 
|  | } | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestRegress650969_11_let() { | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | var a; | 
|  | function inner() { | 
|  | let [a, b] = [1, 2]; | 
|  | } | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestRegress650969_11_const() { | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | var a; | 
|  | function inner() { | 
|  | const [a, b] = [1, 2]; | 
|  | } | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestRegress650969_12_var() { | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | var a; | 
|  | function inner() { | 
|  | var [b, a] = [1, 2]; | 
|  | } | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestRegress650969_12_let() { | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | var a; | 
|  | function inner() { | 
|  | let [b, a] = [1, 2]; | 
|  | } | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestRegress650969_12_const() { | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | var a; | 
|  | function inner() { | 
|  | const [b, a] = [1, 2]; | 
|  | } | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestRegress650969_13_var() { | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | var a; | 
|  | function inner() { | 
|  | var [b, ...a] = [1, 2]; | 
|  | } | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestRegress650969_13_let() { | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | var a; | 
|  | function inner() { | 
|  | let [b, ...a] = [1, 2]; | 
|  | } | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestRegress650969_13_const() { | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | var a; | 
|  | function inner() { | 
|  | const [b, ...a] = [1, 2]; | 
|  | } | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestRegress650969_14_var() { | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | var a; | 
|  | function inner() { | 
|  | var {a, b} = {a: 1, b: 2}; | 
|  | } | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestRegress650969_14_let() { | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | var a; | 
|  | function inner() { | 
|  | let {a, b} = {a: 1, b: 2}; | 
|  | } | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestRegress650969_14_const() { | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | var a; | 
|  | function inner() { | 
|  | const {a, b} = {a: 1, b: 2}; | 
|  | } | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestRegress650969_15_var() { | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | var a; | 
|  | function inner() { | 
|  | var {b: {a}, c} = {b: {a: 1}, c: 2}; | 
|  | } | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestRegress650969_15_let() { | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | var a; | 
|  | function inner() { | 
|  | let {b: {a}, c} = {b: {a: 1}, c: 2}; | 
|  | } | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestRegress650969_15_const() { | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | var a; | 
|  | function inner() { | 
|  | const {b: {a}, c} = {b: {a: 1}, c: 2}; | 
|  | } | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestRegress650969_16_var() { | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | var a; | 
|  | function inner() { | 
|  | var {a: {b}, c} = {a: {b: 1}, c: 2}; | 
|  | } | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestRegress650969_16_let() { | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | var a; | 
|  | function inner() { | 
|  | let {a: {b}, c} = {a: {b: 1}, c: 2}; | 
|  | } | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestRegress650969_16_const() { | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | var a; | 
|  | function inner() { | 
|  | const {a: {b}, c} = {a: {b: 1}, c: 2}; | 
|  | } | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestRegress650969_17_var() { | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | var a; | 
|  | function inner() { | 
|  | for (var a = 0; 0 == 1; ) { } | 
|  | } | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestRegress650969_17_let() { | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | var a; | 
|  | function inner() { | 
|  | for (let a = 0; 0 == 1; ) { } | 
|  | } | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestRegress650969_17_const() { | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | var a; | 
|  | function inner() { | 
|  | for (const a = 0; 0 == 1; ) { } | 
|  | } | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestRegress650969_18() { | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | var a; | 
|  | function inner() { | 
|  | function innerinner([a, b]) {} | 
|  | } | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestRegress650969_18() { | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | var a; | 
|  | function inner() { | 
|  | function innerinner(a) {} | 
|  | } | 
|  | } | 
|  | })(); | 
|  |  | 
|  | // Regression tests for an intermediate stage where unresolved references were | 
|  | // discarded too aggressively. | 
|  | (function TestRegress650969_sidetrack_var() { | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | var a = 0; | 
|  | function inner() { | 
|  | return a; | 
|  | var {b: {a}, c} = {b: {a: 1}, c: 2}; | 
|  | } | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestRegress650969_sidetrack_let() { | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | var a = 0; | 
|  | function inner() { | 
|  | return a; | 
|  | let {b: {a}, c} = {b: {a: 1}, c: 2}; | 
|  | } | 
|  | } | 
|  | })(); | 
|  |  | 
|  | (function TestRegress650969_sidetrack_const() { | 
|  | for (var i = 0; i < 3; ++i) { | 
|  | if (i == 1) { | 
|  | %OptimizeOsr(); | 
|  | } | 
|  | var a = 0; | 
|  | function inner() { | 
|  | return a; | 
|  | const {b: {a}, c} = {b: {a: 1}, c: 2}; | 
|  | } | 
|  | } | 
|  | })(); |