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_cifunction must_throw (str, type = SyntaxError)
16425bb815Sopenharmony_ci{
17425bb815Sopenharmony_ci  try
18425bb815Sopenharmony_ci  {
19425bb815Sopenharmony_ci    eval (str);
20425bb815Sopenharmony_ci    assert (false);
21425bb815Sopenharmony_ci  }
22425bb815Sopenharmony_ci  catch (e)
23425bb815Sopenharmony_ci  {
24425bb815Sopenharmony_ci    assert (e instanceof type)
25425bb815Sopenharmony_ci  }
26425bb815Sopenharmony_ci}
27425bb815Sopenharmony_ci
28425bb815Sopenharmony_cimust_throw ("function f(a, [a]) {}");
29425bb815Sopenharmony_cimust_throw ("function f([a], a) {}");
30425bb815Sopenharmony_cimust_throw ("function f(a = b, [b]) {}; f()", ReferenceError);
31425bb815Sopenharmony_cimust_throw ("function f([a+b]) {}");
32425bb815Sopenharmony_cimust_throw ("function f([a().b]) {}");
33425bb815Sopenharmony_cimust_throw ("function f(...[a] = [1]) {}");
34425bb815Sopenharmony_ci
35425bb815Sopenharmony_cifunction a1([a,b]) {
36425bb815Sopenharmony_ci  var a, b;
37425bb815Sopenharmony_ci
38425bb815Sopenharmony_ci  assert(a === 1);
39425bb815Sopenharmony_ci  assert(b === undefined);
40425bb815Sopenharmony_ci
41425bb815Sopenharmony_ci  var a = 3;
42425bb815Sopenharmony_ci  assert(a === 3);
43425bb815Sopenharmony_ci}
44425bb815Sopenharmony_cia1([1]);
45425bb815Sopenharmony_ci
46425bb815Sopenharmony_cifunction a2([a,b]) {
47425bb815Sopenharmony_ci  eval("var a, b");
48425bb815Sopenharmony_ci  assert(a === 1);
49425bb815Sopenharmony_ci  assert(b === undefined);
50425bb815Sopenharmony_ci
51425bb815Sopenharmony_ci  eval("var a = 3");
52425bb815Sopenharmony_ci  assert(a === 3);
53425bb815Sopenharmony_ci}
54425bb815Sopenharmony_cia2([1]);
55425bb815Sopenharmony_ci
56425bb815Sopenharmony_cifunction f1(a, [b], c, [d], e)
57425bb815Sopenharmony_ci{
58425bb815Sopenharmony_ci  assert (a === 1);
59425bb815Sopenharmony_ci  assert (b === 2);
60425bb815Sopenharmony_ci  assert (c === 3);
61425bb815Sopenharmony_ci  assert (d === 4);
62425bb815Sopenharmony_ci  assert (e === 5);
63425bb815Sopenharmony_ci}
64425bb815Sopenharmony_cif1(1, [2], 3, [4], 5)
65425bb815Sopenharmony_ci
66425bb815Sopenharmony_cifunction f2(a, [b], c, [d], e)
67425bb815Sopenharmony_ci{
68425bb815Sopenharmony_ci  eval("");
69425bb815Sopenharmony_ci  assert (a === 1);
70425bb815Sopenharmony_ci  assert (b === 2);
71425bb815Sopenharmony_ci  assert (c === 3);
72425bb815Sopenharmony_ci  assert (d === 4);
73425bb815Sopenharmony_ci  assert (e === 5);
74425bb815Sopenharmony_ci}
75425bb815Sopenharmony_cif2(1, [2], 3, [4], 5)
76425bb815Sopenharmony_ci
77425bb815Sopenharmony_civar g1 = (a, [b], c, [d], e) => {
78425bb815Sopenharmony_ci  assert (a === 1);
79425bb815Sopenharmony_ci  assert (b === 2);
80425bb815Sopenharmony_ci  assert (c === 3);
81425bb815Sopenharmony_ci  assert (d === 4);
82425bb815Sopenharmony_ci  assert (e === 5);
83425bb815Sopenharmony_ci}
84425bb815Sopenharmony_cig1(1, [2], 3, [4], 5)
85425bb815Sopenharmony_ci
86425bb815Sopenharmony_civar g2 = (a, [b], c, [d], e) => {
87425bb815Sopenharmony_ci  eval("");
88425bb815Sopenharmony_ci  assert (a === 1);
89425bb815Sopenharmony_ci  assert (b === 2);
90425bb815Sopenharmony_ci  assert (c === 3);
91425bb815Sopenharmony_ci  assert (d === 4);
92425bb815Sopenharmony_ci  assert (e === 5);
93425bb815Sopenharmony_ci}
94425bb815Sopenharmony_cig2(1, [2], 3, [4], 5)
95