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 f(a, b = a)
16425bb815Sopenharmony_ci{
17425bb815Sopenharmony_ci  function a() { return 2; }
18425bb815Sopenharmony_ci
19425bb815Sopenharmony_ci  assert(a() === 2);
20425bb815Sopenharmony_ci  assert(b === 1)
21425bb815Sopenharmony_ci}
22425bb815Sopenharmony_cif(1);
23425bb815Sopenharmony_ci
24425bb815Sopenharmony_cifunction g(a, b = a)
25425bb815Sopenharmony_ci{
26425bb815Sopenharmony_ci  function a() { return 2; }
27425bb815Sopenharmony_ci
28425bb815Sopenharmony_ci  eval("assert(a() === 2)");
29425bb815Sopenharmony_ci  eval("assert(b === 1)");
30425bb815Sopenharmony_ci}
31425bb815Sopenharmony_cig(1);
32425bb815Sopenharmony_ci
33425bb815Sopenharmony_civar x = 1;
34425bb815Sopenharmony_cifunction h(a = x) {
35425bb815Sopenharmony_ci  assert(x === undefined);
36425bb815Sopenharmony_ci  var x = 2;
37425bb815Sopenharmony_ci  assert(a === 1);
38425bb815Sopenharmony_ci  assert(x === 2);
39425bb815Sopenharmony_ci}
40425bb815Sopenharmony_cih();
41425bb815Sopenharmony_ci
42425bb815Sopenharmony_cix = function() { return 4; }
43425bb815Sopenharmony_cilet y = 6;
44425bb815Sopenharmony_ci
45425bb815Sopenharmony_cifunction i(a = x() / 2, b = (y) + 2, c = typeof z) {
46425bb815Sopenharmony_ci  let y = 10;
47425bb815Sopenharmony_ci  let z = 11;
48425bb815Sopenharmony_ci
49425bb815Sopenharmony_ci  function x() { return 5; }
50425bb815Sopenharmony_ci
51425bb815Sopenharmony_ci  assert(a === 2);
52425bb815Sopenharmony_ci  assert(x() === 5);
53425bb815Sopenharmony_ci  assert(b === 8);
54425bb815Sopenharmony_ci  assert(c === "undefined");
55425bb815Sopenharmony_ci  assert(y === 10);
56425bb815Sopenharmony_ci  assert(z === 11);
57425bb815Sopenharmony_ci}
58425bb815Sopenharmony_cii();
59425bb815Sopenharmony_ci
60425bb815Sopenharmony_civar arguments = 10;
61425bb815Sopenharmony_cifunction j(a = arguments[1])
62425bb815Sopenharmony_ci{
63425bb815Sopenharmony_ci  assert(a === 2);
64425bb815Sopenharmony_ci  a = 3;
65425bb815Sopenharmony_ci  assert(arguments[0] === undefined)
66425bb815Sopenharmony_ci}
67425bb815Sopenharmony_cij(undefined,2);
68425bb815Sopenharmony_ci
69425bb815Sopenharmony_cifunction k(a = 2)
70425bb815Sopenharmony_ci{
71425bb815Sopenharmony_ci  let d = 5;
72425bb815Sopenharmony_ci  assert(d === 5);
73425bb815Sopenharmony_ci  eval("assert(a === 2)");
74425bb815Sopenharmony_ci}
75425bb815Sopenharmony_cik();
76425bb815Sopenharmony_ci
77425bb815Sopenharmony_cifunction l(a = 3)
78425bb815Sopenharmony_ci{
79425bb815Sopenharmony_ci  const d = 6;
80425bb815Sopenharmony_ci  assert(d === 6);
81425bb815Sopenharmony_ci  eval("assert(a === 3)");
82425bb815Sopenharmony_ci}
83425bb815Sopenharmony_cil();
84425bb815Sopenharmony_ci
85425bb815Sopenharmony_cifunction m(a, b = 2)
86425bb815Sopenharmony_ci{
87425bb815Sopenharmony_ci  assert(a === 1);
88425bb815Sopenharmony_ci  assert(arguments[0] === 1);
89425bb815Sopenharmony_ci  assert(b === 2);
90425bb815Sopenharmony_ci  assert(arguments[1] === undefined);
91425bb815Sopenharmony_ci
92425bb815Sopenharmony_ci  a = 8;
93425bb815Sopenharmony_ci  b = 9;
94425bb815Sopenharmony_ci
95425bb815Sopenharmony_ci  assert(a === 8);
96425bb815Sopenharmony_ci  assert(arguments[0] === 1);
97425bb815Sopenharmony_ci  assert(b === 9);
98425bb815Sopenharmony_ci  assert(arguments[1] === undefined);
99425bb815Sopenharmony_ci}
100425bb815Sopenharmony_cim(1);
101