summaryrefslogtreecommitdiff
path: root/deps/v8/test/mjsunit/regress/regress-crbug-1171195.js
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/test/mjsunit/regress/regress-crbug-1171195.js')
-rw-r--r--deps/v8/test/mjsunit/regress/regress-crbug-1171195.js160
1 files changed, 160 insertions, 0 deletions
diff --git a/deps/v8/test/mjsunit/regress/regress-crbug-1171195.js b/deps/v8/test/mjsunit/regress/regress-crbug-1171195.js
new file mode 100644
index 0000000000..bae0473ece
--- /dev/null
+++ b/deps/v8/test/mjsunit/regress/regress-crbug-1171195.js
@@ -0,0 +1,160 @@
+// Copyright 2021 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 OriginalRegressionTest() {
+ function lazy() {
+ class X {
+ static x = function() {
+ function f() { eval(); }
+ };
+ }
+ }
+ lazy();
+})();
+
+(function TestEvalInsideFunctionInsideInitializer() {
+ function lazy() {
+ class A {}
+ class B extends A {
+ x = function() {
+ eval('super.y');
+ };
+ }
+ return B;
+ }
+ let c = lazy();
+ let o = new c();
+ assertThrows(() => {o.x()});
+})();
+
+(function TestEvalInsideArrowFunctionInsideInitializer() {
+ let result;
+ function lazy() {
+ class A {}
+ A.prototype.y = 42;
+ class B extends A {
+ x = () => {
+ eval('result = super.y');
+ };
+ }
+ return B;
+ }
+ let c = lazy();
+ let o = new c();
+ o.x();
+ assertEquals(42, result);
+})();
+
+(function TestEvalInsideFunctionInsideMethod() {
+ class A {}
+ A.prototype.x = 42;
+ class B extends A {
+ m() {
+ function f() {
+ eval("super.x;");
+ }
+ return f;
+ }
+ }
+ let f = (new B()).m();
+ assertThrows(() => { f(); });
+})();
+
+// Same as the previous test, except for object literals.
+(function TestEvalInsideFunctionInsideObjectLiteralMethod() {
+ let o = {
+ m() {
+ function f() {
+ eval("super.x;");
+ }
+ return f;
+ }
+ };
+ let f = o.m();
+ assertThrows(() => { f(); });
+})();
+
+(function TestEvalInsideArrowFunctionInsideMethod() {
+ let result;
+ class A {}
+ A.prototype.x = 42;
+ class B extends A {
+ m() {
+ let f = () => {
+ eval("result = super.x;");
+ }
+ return f;
+ }
+ }
+ let o = new B();
+ o.m()();
+ assertEquals(42, result);
+})();
+
+(function TestEvalInsideArrowFunctionInsideObjectLiteralMethod() {
+ let result;
+ let o = {
+ __proto__: {'x': 42},
+ m() {
+ let f = () => {
+ eval("result = super.x;");
+ }
+ return f;
+ }
+ };
+ o.m()();
+ assertEquals(42, result);
+})();
+
+(function TestSkippingMethodWithEvalInsideInnerFunc() {
+ function lazy() {
+ class MyClass {
+ test_method() {
+ var var1;
+ function f1() { eval(''); }
+ function skippable() { }
+ }
+ }
+ var o = new MyClass(); return o.test_method;
+ }
+ lazy();
+})();
+
+(function TestSkippingMethod() {
+ function lazy() {
+ class A {}
+ class B extends A {
+ skip_me() { return super.bar; }
+ }
+ }
+ lazy();
+})();
+
+(function TestSkippingObjectLiteralMethod() {
+ function lazy() {
+ let o = {
+ skip_me() { return super.bar; }
+ };
+ }
+ lazy();
+})();
+
+(function TestSkippingMethodWithEval() {
+ function lazy() {
+ class A {}
+ class B extends A {
+ skip_me() { eval(''); }
+ }
+ }
+ lazy();
+})();
+
+(function TestSkippingObjectLiteralMethodWithEval() {
+ function lazy() {
+ let o = {
+ skip_me() { eval(''); }
+ };
+ }
+ lazy();
+})();