1425bb815Sopenharmony_ci// Copyright JS Foundation and other contributors, http://js.foundation
2425bb815Sopenharmony_ci//
3425bb815Sopenharmony_ci// Licensed under the Apache License, Version 2.0 (the "License");
4425bb815Sopenharmony_ci// you may not use this file except in compliance with the License.
5425bb815Sopenharmony_ci// You may obtain a copy of the License at
6425bb815Sopenharmony_ci//
7425bb815Sopenharmony_ci//     http://www.apache.org/licenses/LICENSE-2.0
8425bb815Sopenharmony_ci//
9425bb815Sopenharmony_ci// Unless required by applicable law or agreed to in writing, software
10425bb815Sopenharmony_ci// distributed under the License is distributed on an "AS IS" BASIS
11425bb815Sopenharmony_ci// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12425bb815Sopenharmony_ci// See the License for the specific language governing permissions and
13425bb815Sopenharmony_ci// limitations under the License.
14425bb815Sopenharmony_ci
15425bb815Sopenharmony_civar a = 1;
16425bb815Sopenharmony_civar b = 2;
17425bb815Sopenharmony_ci
18425bb815Sopenharmony_cifunction f(x = eval("eval('var a = 3; function b() { return 4 } () => a')"), y = b) {
19425bb815Sopenharmony_ci  eval("eval('var a = 5; function b() { return 6 }')");
20425bb815Sopenharmony_ci
21425bb815Sopenharmony_ci  assert(a === 5);
22425bb815Sopenharmony_ci  assert(b() === 6);
23425bb815Sopenharmony_ci
24425bb815Sopenharmony_ci  assert(x() === 3);
25425bb815Sopenharmony_ci  assert(y() === 4);
26425bb815Sopenharmony_ci
27425bb815Sopenharmony_ci  delete a;
28425bb815Sopenharmony_ci  delete b;
29425bb815Sopenharmony_ci
30425bb815Sopenharmony_ci  assert(a === 3);
31425bb815Sopenharmony_ci  assert(b() === 4);
32425bb815Sopenharmony_ci
33425bb815Sopenharmony_ci  assert(x() === 3);
34425bb815Sopenharmony_ci  assert(y() === 4);
35425bb815Sopenharmony_ci
36425bb815Sopenharmony_ci  delete a;
37425bb815Sopenharmony_ci  delete b;
38425bb815Sopenharmony_ci
39425bb815Sopenharmony_ci  assert(a === 1);
40425bb815Sopenharmony_ci  assert(b === 2);
41425bb815Sopenharmony_ci
42425bb815Sopenharmony_ci  assert(x() === 1);
43425bb815Sopenharmony_ci  assert(y() === 4);
44425bb815Sopenharmony_ci}
45425bb815Sopenharmony_cif()
46425bb815Sopenharmony_ci
47425bb815Sopenharmony_cifunction g() {
48425bb815Sopenharmony_ci  'use strict'
49425bb815Sopenharmony_ci
50425bb815Sopenharmony_ci  function h(x, y = function() { return x }) {
51425bb815Sopenharmony_ci    var x = 2;
52425bb815Sopenharmony_ci
53425bb815Sopenharmony_ci    /* This should not overwrite y. */
54425bb815Sopenharmony_ci    eval("var y = 3; assert (y === 3)");
55425bb815Sopenharmony_ci
56425bb815Sopenharmony_ci    assert(x === 2);
57425bb815Sopenharmony_ci    assert(typeof y === "function");
58425bb815Sopenharmony_ci    assert(y() === 1);
59425bb815Sopenharmony_ci  }
60425bb815Sopenharmony_ci  h(1);
61425bb815Sopenharmony_ci}
62425bb815Sopenharmony_cig();
63425bb815Sopenharmony_ci
64425bb815Sopenharmony_cifunction h(a, get = () => a, set = (v) => a = v) {
65425bb815Sopenharmony_ci  assert(a === 1);
66425bb815Sopenharmony_ci
67425bb815Sopenharmony_ci  var a = 2;
68425bb815Sopenharmony_ci
69425bb815Sopenharmony_ci  assert(a === 2);
70425bb815Sopenharmony_ci  assert(get() === 1);
71425bb815Sopenharmony_ci
72425bb815Sopenharmony_ci  set(3)
73425bb815Sopenharmony_ci  a = 4;
74425bb815Sopenharmony_ci
75425bb815Sopenharmony_ci  assert(a === 4);
76425bb815Sopenharmony_ci  assert(get() === 3);
77425bb815Sopenharmony_ci}
78425bb815Sopenharmony_cih(1);
79425bb815Sopenharmony_ci
80425bb815Sopenharmony_cifunction i([a], get = () => a, set = (v) => a = v) {
81425bb815Sopenharmony_ci  assert(a === 1);
82425bb815Sopenharmony_ci
83425bb815Sopenharmony_ci  var a;
84425bb815Sopenharmony_ci  assert(a === 1);
85425bb815Sopenharmony_ci
86425bb815Sopenharmony_ci  a = 2;
87425bb815Sopenharmony_ci
88425bb815Sopenharmony_ci  assert(a === 2);
89425bb815Sopenharmony_ci  assert(get() === 1);
90425bb815Sopenharmony_ci
91425bb815Sopenharmony_ci  set(3)
92425bb815Sopenharmony_ci  a = 4;
93425bb815Sopenharmony_ci
94425bb815Sopenharmony_ci  assert(a === 4);
95425bb815Sopenharmony_ci  assert(get() === 3);
96425bb815Sopenharmony_ci}
97425bb815Sopenharmony_cii([1]);
98425bb815Sopenharmony_ci
99425bb815Sopenharmony_cifunction j(a = eval()) {
100425bb815Sopenharmony_ci  var a = 3.14;
101425bb815Sopenharmony_ci
102425bb815Sopenharmony_ci  try {
103425bb815Sopenharmony_ci    eval("throw 1; function a() { return 8; }")
104425bb815Sopenharmony_ci    assert(false)
105425bb815Sopenharmony_ci  } catch (e) {
106425bb815Sopenharmony_ci    assert(e === 1)
107425bb815Sopenharmony_ci  }
108425bb815Sopenharmony_ci
109425bb815Sopenharmony_ci  assert(a() === 8)
110425bb815Sopenharmony_ci}
111425bb815Sopenharmony_cij()
112