| // 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); |
| } |
| } |
| %PrepareFunctionForOptimization(TestVarInInnerFunction); |
| TestVarInInnerFunction(); |
| |
| |
| // 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); |
| } |
| } |
| %PrepareFunctionForOptimization(TestLetInInnerFunction); |
| TestLetInInnerFunction(); |
| |
| 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); |
| } |
| } |
| %PrepareFunctionForOptimization(TestConstInInnerFunction); |
| TestConstInInnerFunction(); |
| |
| 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); |
| } |
| } |
| %PrepareFunctionForOptimization(TestInnerFunctionParameter); |
| TestInnerFunctionParameter(); |
| |
| 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); |
| } |
| } |
| %PrepareFunctionForOptimization(TestInnerFunctionRestParameter); |
| TestInnerFunctionRestParameter(); |
| |
| 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); |
| } |
| } |
| %PrepareFunctionForOptimization(TestInnerFunctionDestructuredParameter_1); |
| TestInnerFunctionDestructuredParameter_1(); |
| |
| 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); |
| } |
| } |
| %PrepareFunctionForOptimization(TestInnerFunctionDestructuredParameter_2); |
| TestInnerFunctionDestructuredParameter_2(); |
| |
| 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); |
| } |
| } |
| %PrepareFunctionForOptimization(TestInnerArrowFunctionParameter); |
| TestInnerArrowFunctionParameter(); |
| |
| 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); |
| } |
| } |
| %PrepareFunctionForOptimization(TestInnerArrowFunctionRestParameter); |
| TestInnerArrowFunctionRestParameter(); |
| |
| 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); |
| } |
| } |
| %PrepareFunctionForOptimization(TestInnerArrowFunctionDestructuredParameter_1); |
| TestInnerArrowFunctionDestructuredParameter_1(); |
| |
| 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); |
| } |
| } |
| %PrepareFunctionForOptimization(TestInnerArrowFunctionDestructuredParameter_2); |
| TestInnerArrowFunctionDestructuredParameter_2(); |
| |
| 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); |
| } |
| } |
| %PrepareFunctionForOptimization(TestInnerInnerFunctionParameter); |
| TestInnerInnerFunctionParameter(); |
| |
| 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); |
| } |
| } |
| %PrepareFunctionForOptimization(TestInnerInnerFunctionRestParameter); |
| TestInnerInnerFunctionRestParameter(); |
| |
| 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); |
| } |
| } |
| %PrepareFunctionForOptimization(TestInnerInnerFunctionDestructuredParameter_1); |
| TestInnerInnerFunctionDestructuredParameter_1(); |
| |
| 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); |
| } |
| } |
| %PrepareFunctionForOptimization(TestInnerInnerFunctionDestructuredParameter_2); |
| TestInnerInnerFunctionDestructuredParameter_2(); |
| |
| 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); |
| } |
| } |
| %PrepareFunctionForOptimization(TestInnerInnerArrowFunctionParameter); |
| TestInnerInnerArrowFunctionParameter(); |
| |
| 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); |
| } |
| } |
| %PrepareFunctionForOptimization(TestInnerInnerArrowFunctionRestParameter); |
| TestInnerInnerArrowFunctionRestParameter(); |
| |
| 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); |
| } |
| } |
| %PrepareFunctionForOptimization(TestInnerInnerArrowFunctionDestructuredParameter_1); |
| TestInnerInnerArrowFunctionDestructuredParameter_1(); |
| |
| 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); |
| } |
| } |
| %PrepareFunctionForOptimization(TestInnerInnerArrowFunctionDestructuredParameter_2); |
| TestInnerInnerArrowFunctionDestructuredParameter_2(); |
| |
| 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); |
| } |
| } |
| %PrepareFunctionForOptimization(TestInnerFunctionInnerFunction); |
| TestInnerFunctionInnerFunction(); |
| |
| 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); |
| } |
| } |
| %PrepareFunctionForOptimization(TestInnerFunctionSloppyBlockFunction); |
| TestInnerFunctionSloppyBlockFunction(); |
| |
| 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); |
| } |
| }; |
| %PrepareFunctionForOptimization(TestInnerFunctionCatchVariable); |
| TestInnerFunctionCatchVariable(); |
| |
| 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); |
| } |
| } |
| %PrepareFunctionForOptimization(TestInnerFunctionLoopVariable1); |
| TestInnerFunctionLoopVariable1(); |
| |
| 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); |
| } |
| } |
| %PrepareFunctionForOptimization(TestInnerFunctionLoopVariable2); |
| TestInnerFunctionLoopVariable2(); |
| |
| 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); |
| } |
| } |
| %PrepareFunctionForOptimization(TestInnerFunctionLoopVariable3); |
| TestInnerFunctionLoopVariable3(); |
| |
| 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); |
| } |
| } |
| %PrepareFunctionForOptimization(TestInnerFunctionLoopVariable4); |
| TestInnerFunctionLoopVariable4(); |
| |
| 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); |
| } |
| } |
| %PrepareFunctionForOptimization(TestInnerFunctionClass); |
| TestInnerFunctionClass(); |
| |
| 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); |
| } |
| } |
| %PrepareFunctionForOptimization(TestInnerFunctionDestructuring1); |
| TestInnerFunctionDestructuring1(); |
| |
| 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); |
| } |
| } |
| %PrepareFunctionForOptimization(TestInnerFunctionDestructuring2); |
| TestInnerFunctionDestructuring2(); |
| |
| 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); |
| } |
| } |
| %PrepareFunctionForOptimization(TestInnerFunctionDestructuring3); |
| TestInnerFunctionDestructuring3(); |
| |
| 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); |
| } |
| } |
| %PrepareFunctionForOptimization(TestInnerFunctionDestructuring4); |
| TestInnerFunctionDestructuring4(); |
| |
| 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); |
| } |
| } |
| %PrepareFunctionForOptimization(TestInnerFunctionDestructuring5); |
| TestInnerFunctionDestructuring5(); |
| |
| 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); |
| } |
| } |
| %PrepareFunctionForOptimization(TestInnerFunctionDestructuring6); |
| TestInnerFunctionDestructuring6(); |
| |
| 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); |
| } |
| } |
| %PrepareFunctionForOptimization(TestInnerFunctionDestructuring7); |
| TestInnerFunctionDestructuring7(); |
| |
| 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); |
| } |
| } |
| %PrepareFunctionForOptimization(TestInnerFunctionDestructuring8); |
| TestInnerFunctionDestructuring8(); |
| |
| 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); |
| } |
| } |
| %PrepareFunctionForOptimization(TestInnerFunctionDestructuring9); |
| TestInnerFunctionDestructuring9(); |
| |
| // 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; |
| } |
| } |
| } |
| %PrepareFunctionForOptimization(TestRegress650969_1_var); |
| TestRegress650969_1_var(); |
| |
| function TestRegress650969_1_let() { |
| for (var i = 0; i < 3; ++i) { |
| if (i == 1) { |
| %OptimizeOsr(); |
| } |
| var a; |
| function inner() { |
| let a; |
| } |
| } |
| } |
| %PrepareFunctionForOptimization(TestRegress650969_1_let); |
| TestRegress650969_1_let(); |
| |
| function TestRegress650969_2_var() { |
| for (var i = 0; i < 3; ++i) { |
| if (i == 1) { |
| %OptimizeOsr(); |
| } |
| var a; |
| function inner() { |
| var a = 6; |
| } |
| } |
| } |
| %PrepareFunctionForOptimization(TestRegress650969_2_var); |
| TestRegress650969_2_var(); |
| |
| function TestRegress650969_2_let() { |
| for (var i = 0; i < 3; ++i) { |
| if (i == 1) { |
| %OptimizeOsr(); |
| } |
| var a; |
| function inner() { |
| let a = 6; |
| } |
| } |
| } |
| %PrepareFunctionForOptimization(TestRegress650969_2_let); |
| TestRegress650969_2_let(); |
| |
| function TestRegress650969_2_const() { |
| for (var i = 0; i < 3; ++i) { |
| if (i == 1) { |
| %OptimizeOsr(); |
| } |
| var a; |
| function inner() { |
| const a = 6; |
| } |
| } |
| } |
| %PrepareFunctionForOptimization(TestRegress650969_2_const); |
| TestRegress650969_2_const(); |
| |
| function TestRegress650969_3_var() { |
| for (var i = 0; i < 3; ++i) { |
| if (i == 1) { |
| %OptimizeOsr(); |
| } |
| var a; |
| function inner() { |
| var a, b; |
| } |
| } |
| } |
| %PrepareFunctionForOptimization(TestRegress650969_3_var); |
| TestRegress650969_3_var(); |
| |
| function TestRegress650969_3_let() { |
| for (var i = 0; i < 3; ++i) { |
| if (i == 1) { |
| %OptimizeOsr(); |
| } |
| var a; |
| function inner() { |
| let a, b; |
| } |
| } |
| } |
| %PrepareFunctionForOptimization(TestRegress650969_3_let); |
| TestRegress650969_3_let(); |
| |
| function TestRegress650969_4_var() { |
| for (var i = 0; i < 3; ++i) { |
| if (i == 1) { |
| %OptimizeOsr(); |
| } |
| var a; |
| function inner() { |
| var a = 6, b; |
| } |
| } |
| } |
| %PrepareFunctionForOptimization(TestRegress650969_4_var); |
| TestRegress650969_4_var(); |
| |
| function TestRegress650969_4_let() { |
| for (var i = 0; i < 3; ++i) { |
| if (i == 1) { |
| %OptimizeOsr(); |
| } |
| var a; |
| function inner() { |
| let a = 6, b; |
| } |
| } |
| } |
| %PrepareFunctionForOptimization(TestRegress650969_4_let); |
| TestRegress650969_4_let(); |
| |
| function TestRegress650969_4_const() { |
| for (var i = 0; i < 3; ++i) { |
| if (i == 1) { |
| %OptimizeOsr(); |
| } |
| var a; |
| function inner() { |
| const a = 0, b = 0; |
| } |
| } |
| } |
| %PrepareFunctionForOptimization(TestRegress650969_4_const); |
| TestRegress650969_4_const(); |
| |
| function TestRegress650969_9_parameter() { |
| for (var i = 0; i < 3; ++i) { |
| if (i == 1) { |
| %OptimizeOsr(); |
| } |
| var a; |
| function inner(a) {} |
| } |
| } |
| %PrepareFunctionForOptimization(TestRegress650969_9_parameter); |
| TestRegress650969_9_parameter(); |
| |
| function TestRegress650969_9_restParameter() { |
| for (var i = 0; i < 3; ++i) { |
| if (i == 1) { |
| %OptimizeOsr(); |
| } |
| var a; |
| function inner(...a) {} |
| } |
| } |
| %PrepareFunctionForOptimization(TestRegress650969_9_restParameter); |
| TestRegress650969_9_restParameter(); |
| |
| function TestRegress650969_9_destructuredParameter_1() { |
| for (var i = 0; i < 3; ++i) { |
| if (i == 1) { |
| %OptimizeOsr(); |
| } |
| var a; |
| function inner([d, a]) {} |
| } |
| } |
| %PrepareFunctionForOptimization(TestRegress650969_9_destructuredParameter_1); |
| TestRegress650969_9_destructuredParameter_1(); |
| |
| function TestRegress650969_9_destructuredParameter_2() { |
| for (var i = 0; i < 3; ++i) { |
| if (i == 1) { |
| %OptimizeOsr(); |
| } |
| var a; |
| function inner({d, a}) {} |
| } |
| } |
| %PrepareFunctionForOptimization(TestRegress650969_9_destructuredParameter_2); |
| TestRegress650969_9_destructuredParameter_2(); |
| |
| function TestRegress650969_10_parameter() { |
| for (var i = 0; i < 3; ++i) { |
| if (i == 1) { |
| %OptimizeOsr(); |
| } |
| var a; |
| function inner() { |
| function innerinner(a) {} |
| } |
| } |
| } |
| %PrepareFunctionForOptimization(TestRegress650969_10_parameter); |
| TestRegress650969_10_parameter(); |
| |
| function TestRegress650969_10_restParameter() { |
| for (var i = 0; i < 3; ++i) { |
| if (i == 1) { |
| %OptimizeOsr(); |
| } |
| var a; |
| function inner() { |
| function innerinner(...a) {} |
| } |
| } |
| } |
| %PrepareFunctionForOptimization(TestRegress650969_10_restParameter); |
| TestRegress650969_10_restParameter(); |
| |
| function TestRegress650969_10_destructuredParameter_1() { |
| for (var i = 0; i < 3; ++i) { |
| if (i == 1) { |
| %OptimizeOsr(); |
| } |
| var a; |
| function inner() { |
| function innerinner([d, a]) {} |
| } |
| } |
| } |
| %PrepareFunctionForOptimization( TestRegress650969_10_destructuredParameter_1); |
| TestRegress650969_10_destructuredParameter_1(); |
| |
| function TestRegress650969_10_destructuredParameter_2() { |
| for (var i = 0; i < 3; ++i) { |
| if (i == 1) { |
| %OptimizeOsr(); |
| } |
| var a; |
| function inner() { |
| function innerinner({d, a}) {} |
| } |
| } |
| } |
| %PrepareFunctionForOptimization(TestRegress650969_10_destructuredParameter_2); |
| TestRegress650969_10_destructuredParameter_2(); |
| |
| function TestRegress650969_11_var() { |
| for (var i = 0; i < 3; ++i) { |
| if (i == 1) { |
| %OptimizeOsr(); |
| } |
| var a; |
| function inner() { |
| var [a, b] = [1, 2]; |
| } |
| } |
| } |
| %PrepareFunctionForOptimization(TestRegress650969_11_var); |
| TestRegress650969_11_var(); |
| |
| |
| function TestRegress650969_11_let() { |
| for (var i = 0; i < 3; ++i) { |
| if (i == 1) { |
| %OptimizeOsr(); |
| } |
| var a; |
| function inner() { |
| let [a, b] = [1, 2]; |
| } |
| } |
| } |
| %PrepareFunctionForOptimization(TestRegress650969_11_let); |
| TestRegress650969_11_let(); |
| |
| function TestRegress650969_11_const() { |
| for (var i = 0; i < 3; ++i) { |
| if (i == 1) { |
| %OptimizeOsr(); |
| } |
| var a; |
| function inner() { |
| const [a, b] = [1, 2]; |
| } |
| } |
| } |
| %PrepareFunctionForOptimization(TestRegress650969_11_const); |
| TestRegress650969_11_const(); |
| |
| function TestRegress650969_12_var() { |
| for (var i = 0; i < 3; ++i) { |
| if (i == 1) { |
| %OptimizeOsr(); |
| } |
| var a; |
| function inner() { |
| var [b, a] = [1, 2]; |
| } |
| } |
| } |
| %PrepareFunctionForOptimization(TestRegress650969_12_var); |
| TestRegress650969_12_var(); |
| |
| function TestRegress650969_12_let() { |
| for (var i = 0; i < 3; ++i) { |
| if (i == 1) { |
| %OptimizeOsr(); |
| } |
| var a; |
| function inner() { |
| let [b, a] = [1, 2]; |
| } |
| } |
| } |
| %PrepareFunctionForOptimization(TestRegress650969_12_let); |
| TestRegress650969_12_let(); |
| |
| function TestRegress650969_12_const() { |
| for (var i = 0; i < 3; ++i) { |
| if (i == 1) { |
| %OptimizeOsr(); |
| } |
| var a; |
| function inner() { |
| const [b, a] = [1, 2]; |
| } |
| } |
| } |
| %PrepareFunctionForOptimization(TestRegress650969_12_const); |
| TestRegress650969_12_const(); |
| |
| function TestRegress650969_13_var() { |
| for (var i = 0; i < 3; ++i) { |
| if (i == 1) { |
| %OptimizeOsr(); |
| } |
| var a; |
| function inner() { |
| var [b, ...a] = [1, 2]; |
| } |
| } |
| } |
| %PrepareFunctionForOptimization(TestRegress650969_13_var); |
| TestRegress650969_13_var(); |
| |
| function TestRegress650969_13_let() { |
| for (var i = 0; i < 3; ++i) { |
| if (i == 1) { |
| %OptimizeOsr(); |
| } |
| var a; |
| function inner() { |
| let [b, ...a] = [1, 2]; |
| } |
| } |
| } |
| %PrepareFunctionForOptimization(TestRegress650969_13_let); |
| TestRegress650969_13_let(); |
| |
| function TestRegress650969_13_const() { |
| for (var i = 0; i < 3; ++i) { |
| if (i == 1) { |
| %OptimizeOsr(); |
| } |
| var a; |
| function inner() { |
| const [b, ...a] = [1, 2]; |
| } |
| } |
| } |
| %PrepareFunctionForOptimization(TestRegress650969_13_const); |
| TestRegress650969_13_const(); |
| |
| 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}; |
| } |
| } |
| } |
| %PrepareFunctionForOptimization(TestRegress650969_14_var); |
| TestRegress650969_14_var(); |
| |
| 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}; |
| } |
| } |
| } |
| %PrepareFunctionForOptimization(TestRegress650969_14_let); |
| TestRegress650969_14_let(); |
| |
| 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}; |
| } |
| } |
| } |
| %PrepareFunctionForOptimization(TestRegress650969_14_const); |
| TestRegress650969_14_const(); |
| |
| 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}; |
| } |
| } |
| } |
| %PrepareFunctionForOptimization(TestRegress650969_15_var); |
| TestRegress650969_15_var(); |
| |
| 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}; |
| } |
| } |
| } |
| %PrepareFunctionForOptimization(TestRegress650969_15_let); |
| TestRegress650969_15_let(); |
| |
| 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}; |
| } |
| } |
| } |
| %PrepareFunctionForOptimization(TestRegress650969_15_const); |
| TestRegress650969_15_const(); |
| |
| 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}; |
| } |
| } |
| } |
| %PrepareFunctionForOptimization(TestRegress650969_16_var); |
| TestRegress650969_16_var(); |
| |
| 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}; |
| } |
| } |
| } |
| %PrepareFunctionForOptimization(TestRegress650969_16_let); |
| TestRegress650969_16_let(); |
| |
| 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}; |
| } |
| } |
| } |
| %PrepareFunctionForOptimization(TestRegress650969_16_const); |
| TestRegress650969_16_const(); |
| |
| 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; ) { } |
| } |
| } |
| } |
| %PrepareFunctionForOptimization(TestRegress650969_17_var); |
| TestRegress650969_17_var(); |
| |
| 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; ) { } |
| } |
| } |
| } |
| %PrepareFunctionForOptimization(TestRegress650969_17_let); |
| TestRegress650969_17_let(); |
| |
| 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; ) { } |
| } |
| } |
| } |
| %PrepareFunctionForOptimization(TestRegress650969_17_const); |
| TestRegress650969_17_const(); |
| |
| function TestRegress650969_18() { |
| for (var i = 0; i < 3; ++i) { |
| if (i == 1) { |
| %OptimizeOsr(); |
| } |
| var a; |
| function inner() { |
| function innerinner([a, b]) {} |
| } |
| } |
| } |
| %PrepareFunctionForOptimization(TestRegress650969_18); |
| TestRegress650969_18(); |
| |
| function TestRegress650969_18() { |
| for (var i = 0; i < 3; ++i) { |
| if (i == 1) { |
| %OptimizeOsr(); |
| } |
| var a; |
| function inner() { |
| function innerinner(a) {} |
| } |
| } |
| } |
| %PrepareFunctionForOptimization(TestRegress650969_18); |
| TestRegress650969_18(); |
| |
| // 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}; |
| } |
| } |
| } |
| %PrepareFunctionForOptimization(TestRegress650969_sidetrack_var); |
| TestRegress650969_sidetrack_var(); |
| |
| 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}; |
| } |
| } |
| } |
| %PrepareFunctionForOptimization(TestRegress650969_sidetrack_let); |
| TestRegress650969_sidetrack_let(); |
| |
| 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}; |
| } |
| } |
| } |
| %PrepareFunctionForOptimization(TestRegress650969_sidetrack_const); |
| TestRegress650969_sidetrack_const(); |