Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(366)

Unified Diff: test/mjsunit/fixed-context-shapes-when-recompiling.js

Issue 2400613003: PreParsing inner functions: Fix declaration-only variables, part 2. (Closed)
Patch Set: rebased Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/parsing/preparser.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/mjsunit/fixed-context-shapes-when-recompiling.js
diff --git a/test/mjsunit/fixed-context-shapes-when-recompiling.js b/test/mjsunit/fixed-context-shapes-when-recompiling.js
index bd64e3d1680de3d1b217ee790764e6fa8d5e5e01..7f88330d381d8f90cd7e015d61e4524810698379 100644
--- a/test/mjsunit/fixed-context-shapes-when-recompiling.js
+++ b/test/mjsunit/fixed-context-shapes-when-recompiling.js
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-// Flags: --min-preparse-length 1 --allow-natives-syntax
+// Flags: --min-preparse-length 1 --allow-natives-syntax --lazy-inner-functions
// Test that the information on which variables to allocate in context doesn't
// change when recompiling.
@@ -50,6 +50,24 @@
}
})();
+(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;
@@ -67,6 +85,23 @@
}
})();
+(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 TestInnerInnerFunctionParameter() {
var a = 1;
var b = 2;
@@ -84,6 +119,23 @@
}
})();
+(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 TestInnerArrowFunctionParameter() {
var a = 1;
var b = 2;
@@ -101,6 +153,23 @@
}
})();
+(function TestInnerArrowFunctionRestParameter() {
+ 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 TestInnerFunctionInnerFunction() {
var a = 1;
var b = 2;
@@ -252,9 +321,171 @@
}
})();
+(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() {
+(function TestRegress650969_1_var() {
for (var i = 0; i < 3; ++i) {
if (i == 1) {
%OptimizeOsr();
@@ -266,67 +497,67 @@
}
})();
-(function TestRegress650969_2() {
+(function TestRegress650969_1_let() {
for (var i = 0; i < 3; ++i) {
if (i == 1) {
%OptimizeOsr();
}
var a;
function inner() {
- var a = 6;
+ let a;
}
}
})();
-(function TestRegress650969_3() {
+(function TestRegress650969_2_var() {
for (var i = 0; i < 3; ++i) {
if (i == 1) {
%OptimizeOsr();
}
var a;
function inner() {
- var a, b;
+ var a = 6;
}
}
})();
-(function TestRegress650969_4() {
+(function TestRegress650969_2_let() {
for (var i = 0; i < 3; ++i) {
if (i == 1) {
%OptimizeOsr();
}
var a;
function inner() {
- var a = 6, b;
+ let a = 6;
}
}
})();
-(function TestRegress650969_5() {
+(function TestRegress650969_2_const() {
for (var i = 0; i < 3; ++i) {
if (i == 1) {
%OptimizeOsr();
}
var a;
function inner() {
- let a;
+ const a = 6;
}
}
})();
-(function TestRegress650969_6() {
+(function TestRegress650969_3_var() {
for (var i = 0; i < 3; ++i) {
if (i == 1) {
%OptimizeOsr();
}
var a;
function inner() {
- let a = 6;
+ var a, b;
}
}
})();
-(function TestRegress650969_7() {
+(function TestRegress650969_3_let() {
for (var i = 0; i < 3; ++i) {
if (i == 1) {
%OptimizeOsr();
@@ -338,7 +569,19 @@
}
})();
-(function TestRegress650969_8() {
+(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();
@@ -350,6 +593,18 @@
}
})();
+(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() {
for (var i = 0; i < 3; ++i) {
if (i == 1) {
@@ -360,3 +615,307 @@
}
}
})();
+
+(function TestRegress650969_10() {
+ for (var i = 0; i < 3; ++i) {
+ if (i == 1) {
+ %OptimizeOsr();
+ }
+ var a;
+ function inner(...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; ) { }
+ }
+ }
+})();
+
+// 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};
+ }
+ }
+})();
« no previous file with comments | « src/parsing/preparser.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698