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