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 local = 0; 16425bb815Sopenharmony_ci 17425bb815Sopenharmony_ciswitch(0) { /* This switch forces a pre-scanner run. */ 18425bb815Sopenharmony_cidefault: 19425bb815Sopenharmony_ci 20425bb815Sopenharmony_ci function f(a = (5, local = 6), 21425bb815Sopenharmony_ci b = ((5 + function(a = 6) { return a }() * 3)), 22425bb815Sopenharmony_ci c, 23425bb815Sopenharmony_ci d = true ? 1 : 2) 24425bb815Sopenharmony_ci { 25425bb815Sopenharmony_ci return "" + a + ", " + b + ", " + c + ", " + d; 26425bb815Sopenharmony_ci } 27425bb815Sopenharmony_ci 28425bb815Sopenharmony_ci assert(f() === "6, 23, undefined, 1"); 29425bb815Sopenharmony_ci assert(local === 6); 30425bb815Sopenharmony_ci 31425bb815Sopenharmony_ci var obj = { 32425bb815Sopenharmony_ci f: function(a = [10,,20], 33425bb815Sopenharmony_ci b, 34425bb815Sopenharmony_ci c = Math.cos(0), 35425bb815Sopenharmony_ci d) 36425bb815Sopenharmony_ci { 37425bb815Sopenharmony_ci return "" + a + ", " + b + ", " + c + ", " + d; 38425bb815Sopenharmony_ci } 39425bb815Sopenharmony_ci }; 40425bb815Sopenharmony_ci 41425bb815Sopenharmony_ci assert(obj.f() === "10,,20, undefined, 1, undefined"); 42425bb815Sopenharmony_ci 43425bb815Sopenharmony_ci function g(a, b = (local = 7)) { } 44425bb815Sopenharmony_ci 45425bb815Sopenharmony_ci local = 0; 46425bb815Sopenharmony_ci g(); 47425bb815Sopenharmony_ci assert(local === 7); 48425bb815Sopenharmony_ci 49425bb815Sopenharmony_ci local = 0; 50425bb815Sopenharmony_ci g(0); 51425bb815Sopenharmony_ci assert(local === 7); 52425bb815Sopenharmony_ci 53425bb815Sopenharmony_ci local = 0; 54425bb815Sopenharmony_ci g(0, undefined); 55425bb815Sopenharmony_ci assert(local === 7); 56425bb815Sopenharmony_ci 57425bb815Sopenharmony_ci local = 0; 58425bb815Sopenharmony_ci g(0, null); 59425bb815Sopenharmony_ci assert(local === 0); 60425bb815Sopenharmony_ci 61425bb815Sopenharmony_ci local = 0; 62425bb815Sopenharmony_ci g(0, false); 63425bb815Sopenharmony_ci assert(local === 0); 64425bb815Sopenharmony_ci break; 65425bb815Sopenharmony_ci} 66425bb815Sopenharmony_ci 67425bb815Sopenharmony_cifunction CheckSyntaxError(str) 68425bb815Sopenharmony_ci{ 69425bb815Sopenharmony_ci try { 70425bb815Sopenharmony_ci eval(str); 71425bb815Sopenharmony_ci assert(false); 72425bb815Sopenharmony_ci } catch (e) { 73425bb815Sopenharmony_ci assert(e instanceof SyntaxError); 74425bb815Sopenharmony_ci } 75425bb815Sopenharmony_ci} 76425bb815Sopenharmony_ci 77425bb815Sopenharmony_ciCheckSyntaxError('function x(a += 5) {}'); 78425bb815Sopenharmony_ciCheckSyntaxError('function x(a =, b) {}'); 79425bb815Sopenharmony_ciCheckSyntaxError('function x(a = (b) {}'); 80425bb815Sopenharmony_ciCheckSyntaxError('function x(a, a = 5) {}'); 81425bb815Sopenharmony_ciCheckSyntaxError('function x(a = 5, a) {}'); 82425bb815Sopenharmony_ci 83425bb815Sopenharmony_ci// Pre-scanner tests. 84425bb815Sopenharmony_civar str = "a = 5, b, c = function() { for (var a = 0; a < 4; a++) ; return a; } ()" 85425bb815Sopenharmony_ci 86425bb815Sopenharmony_civar f = new Function (str, str); 87425bb815Sopenharmony_cif(); 88425bb815Sopenharmony_ci 89425bb815Sopenharmony_civar f = new Function (str, "return (a + c) * (b == undefined ? 1 : 0)"); 90425bb815Sopenharmony_ciassert (f() == 9); 91425bb815Sopenharmony_ci 92425bb815Sopenharmony_cifunction duplicatedArg (a = c, b = d, c) { 93425bb815Sopenharmony_ci assert(a === 1); 94425bb815Sopenharmony_ci assert(b === 2); 95425bb815Sopenharmony_ci assert(c === 3); 96425bb815Sopenharmony_ci} 97425bb815Sopenharmony_ci 98425bb815Sopenharmony_ciduplicatedArg(1, 2, 3); 99