ThisTDZMode is no longer needed
[WebKit-https.git] / Source / JavaScriptCore / tests / stress / code-cache-incorrect-caching.js
1 function shouldBe(actual, expected) {
2     if (actual !== expected)
3         throw new Error(`bad value: ${String(actual)}`);
4 }
5
6 function shouldThrow(func, errorMessage) {
7     var errorThrown = false;
8     var error = null;
9     try {
10         func();
11     } catch (e) {
12         errorThrown = true;
13         error = e;
14     }
15     if (!errorThrown)
16         throw new Error('not thrown');
17     if (String(error) !== errorMessage)
18         throw new Error(`bad error: ${String(error)}`);
19 }
20 var globalEval = eval;
21 var global = this;
22
23 // EvalContextType.
24 {
25     function hello()
26     {
27         return eval('new.target');
28     }
29     shouldBe(hello(), undefined);
30     shouldBe(hello(), undefined);
31     shouldBe(hello(), undefined);
32     globalEval(`
33         var thrown = false;
34         try {
35             eval('new.target');
36         } catch (e) {
37             thrown = true;
38             shouldBe(String(e), "SyntaxError: new.target is only valid inside functions.");
39         }
40         shouldBe(thrown, true);
41     `);
42
43     var thrown = false;
44     try {
45         globalEval('new.target');
46     } catch (e) {
47         thrown = true;
48         shouldBe(String(e), "SyntaxError: new.target is only valid inside functions.");
49     }
50     shouldBe(thrown, true);
51 }
52
53 // DerivedContextType.
54 {
55     var object = {
56         hello()
57         {
58             return eval('super.ok');
59         }
60     };
61     object.__proto__ = { ok: 42 };
62     shouldBe(object.hello(), 42);
63
64     var test = {
65         hello: function () {
66             return eval('super.ok');
67         }
68     };
69     test.__proto__ = { ok: 42 };
70     shouldThrow(function () {
71         test.hello();
72     }, `SyntaxError: super is not valid in this context.`);
73 }
74
75 // isArrowFunctionContext.
76 {
77 globalEval(`
78     function ok()
79     {
80         return eval('this');
81     }
82     shouldBe(ok(), global)
83     var hello = {
84         hello()
85         {
86             var arrow = () => eval('this');
87             shouldBe(arrow(), hello);
88         }
89     };
90     hello.hello();
91 `);
92 }