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 check_reference_error(code) 16425bb815Sopenharmony_ci{ 17425bb815Sopenharmony_ci try { 18425bb815Sopenharmony_ci eval(code); 19425bb815Sopenharmony_ci assert(false); 20425bb815Sopenharmony_ci } catch (e) { 21425bb815Sopenharmony_ci assert(e instanceof ReferenceError); 22425bb815Sopenharmony_ci } 23425bb815Sopenharmony_ci} 24425bb815Sopenharmony_ci 25425bb815Sopenharmony_cifunction f1(a = a) 26425bb815Sopenharmony_ci{ 27425bb815Sopenharmony_ci assert(a === 1) 28425bb815Sopenharmony_ci} 29425bb815Sopenharmony_cif1(1) 30425bb815Sopenharmony_cicheck_reference_error("f1()"); 31425bb815Sopenharmony_ci 32425bb815Sopenharmony_cifunction f2([a] = 1 + a) 33425bb815Sopenharmony_ci{ 34425bb815Sopenharmony_ci assert(a === 2) 35425bb815Sopenharmony_ci} 36425bb815Sopenharmony_cif2([2]) 37425bb815Sopenharmony_cicheck_reference_error("f2()"); 38425bb815Sopenharmony_ci 39425bb815Sopenharmony_cifunction f3([a = !a]) 40425bb815Sopenharmony_ci{ 41425bb815Sopenharmony_ci assert(a === 2) 42425bb815Sopenharmony_ci} 43425bb815Sopenharmony_cif3([2]) 44425bb815Sopenharmony_cicheck_reference_error("f3([])"); 45425bb815Sopenharmony_ci 46425bb815Sopenharmony_cifunction f4([[a]] = a) 47425bb815Sopenharmony_ci{ 48425bb815Sopenharmony_ci assert(a === 3) 49425bb815Sopenharmony_ci} 50425bb815Sopenharmony_cif4([[3]]) 51425bb815Sopenharmony_cicheck_reference_error("f4()"); 52425bb815Sopenharmony_ci 53425bb815Sopenharmony_cifunction f5([[a], b = a] = a) 54425bb815Sopenharmony_ci{ 55425bb815Sopenharmony_ci assert(a === 4 && b === 4) 56425bb815Sopenharmony_ci} 57425bb815Sopenharmony_cif5([[4]]) 58425bb815Sopenharmony_cicheck_reference_error("f5()") 59425bb815Sopenharmony_ci 60425bb815Sopenharmony_cifunction f6(a = 3 - ((b)), b) 61425bb815Sopenharmony_ci{ 62425bb815Sopenharmony_ci assert(a === 1 && b === 2) 63425bb815Sopenharmony_ci} 64425bb815Sopenharmony_cif6(1, 2) 65425bb815Sopenharmony_cicheck_reference_error("f6(undefined, 2)"); 66425bb815Sopenharmony_ci 67425bb815Sopenharmony_cifunction f7(a = b(), [b]) 68425bb815Sopenharmony_ci{ 69425bb815Sopenharmony_ci assert(a === 3 && b === 4) 70425bb815Sopenharmony_ci} 71425bb815Sopenharmony_cif7(3, [4]) 72425bb815Sopenharmony_cicheck_reference_error("f7(undefined, [4])"); 73425bb815Sopenharmony_ci 74425bb815Sopenharmony_cifunction f8(a = (function () { return a * 2 })()) 75425bb815Sopenharmony_ci{ 76425bb815Sopenharmony_ci assert(a === 1) 77425bb815Sopenharmony_ci} 78425bb815Sopenharmony_cif8(1) 79425bb815Sopenharmony_cicheck_reference_error("f8()"); 80425bb815Sopenharmony_ci 81425bb815Sopenharmony_cifunction f9({a = b, b:{b}}) 82425bb815Sopenharmony_ci{ 83425bb815Sopenharmony_ci assert(a === 2 && b === 3) 84425bb815Sopenharmony_ci} 85425bb815Sopenharmony_cif9({a:2, b:{b:3}}) 86425bb815Sopenharmony_cicheck_reference_error("f9({b:{b:3}})"); 87425bb815Sopenharmony_ci 88425bb815Sopenharmony_cifunction f10(a = eval("a")) 89425bb815Sopenharmony_ci{ 90425bb815Sopenharmony_ci assert(a === 1) 91425bb815Sopenharmony_ci} 92425bb815Sopenharmony_cif10(1) 93425bb815Sopenharmony_cicheck_reference_error("f10()"); 94425bb815Sopenharmony_ci 95425bb815Sopenharmony_cifunction f11([a] = eval("a")) 96425bb815Sopenharmony_ci{ 97425bb815Sopenharmony_ci assert(a === 2) 98425bb815Sopenharmony_ci} 99425bb815Sopenharmony_cif11([2]) 100425bb815Sopenharmony_cicheck_reference_error("f11()"); 101425bb815Sopenharmony_ci 102425bb815Sopenharmony_cifunction f12({a} = eval("a")) 103425bb815Sopenharmony_ci{ 104425bb815Sopenharmony_ci assert(a === 3) 105425bb815Sopenharmony_ci} 106425bb815Sopenharmony_cif12({a:3}) 107425bb815Sopenharmony_cicheck_reference_error("f12()"); 108425bb815Sopenharmony_ci 109425bb815Sopenharmony_cifunction f13(a = arguments) 110425bb815Sopenharmony_ci{ 111425bb815Sopenharmony_ci assert(a[0] === undefined) 112425bb815Sopenharmony_ci assert(a[1] === 4) 113425bb815Sopenharmony_ci arguments[0] = 5 114425bb815Sopenharmony_ci assert(a[0] === 5) 115425bb815Sopenharmony_ci} 116425bb815Sopenharmony_cif13(undefined, 4) 117425bb815Sopenharmony_ci 118425bb815Sopenharmony_cifunction f14(a, b = function() { return a; }(), c = (() => a)()) 119425bb815Sopenharmony_ci{ 120425bb815Sopenharmony_ci assert(a === 6 && b === 6 && c === 6) 121425bb815Sopenharmony_ci} 122425bb815Sopenharmony_cif14(6) 123425bb815Sopenharmony_ci 124425bb815Sopenharmony_cifunction f15(a = (() => b)(), b) 125425bb815Sopenharmony_ci{ 126425bb815Sopenharmony_ci assert(a === 1 && b === 2) 127425bb815Sopenharmony_ci} 128425bb815Sopenharmony_cif15(1, 2) 129425bb815Sopenharmony_cicheck_reference_error("f15(undefined, 2)"); 130425bb815Sopenharmony_ci 131425bb815Sopenharmony_civar f16 = (a = a) => 132425bb815Sopenharmony_ci{ 133425bb815Sopenharmony_ci assert(a === 1) 134425bb815Sopenharmony_ci} 135425bb815Sopenharmony_cif16(1) 136425bb815Sopenharmony_cicheck_reference_error("f16()"); 137425bb815Sopenharmony_ci 138425bb815Sopenharmony_civar f17 = ([[a]] = a) => 139425bb815Sopenharmony_ci{ 140425bb815Sopenharmony_ci assert(a === 2) 141425bb815Sopenharmony_ci} 142425bb815Sopenharmony_cif17([[2]]) 143425bb815Sopenharmony_cicheck_reference_error("f17()"); 144425bb815Sopenharmony_ci 145425bb815Sopenharmony_civar f18 = ({a = b, b:{b}}) => 146425bb815Sopenharmony_ci{ 147425bb815Sopenharmony_ci assert(a === 3 && b === 4) 148425bb815Sopenharmony_ci} 149425bb815Sopenharmony_cif18({a:3, b:{b:4}}) 150425bb815Sopenharmony_cicheck_reference_error("f18({b:{b:4}})"); 151425bb815Sopenharmony_ci 152425bb815Sopenharmony_civar f19 = (a = eval("a")) => 153425bb815Sopenharmony_ci{ 154425bb815Sopenharmony_ci assert(a === 5) 155425bb815Sopenharmony_ci} 156425bb815Sopenharmony_cif19(5) 157425bb815Sopenharmony_cicheck_reference_error("f19()"); 158425bb815Sopenharmony_ci 159425bb815Sopenharmony_civar f20 = ([a] = eval("a")) => 160425bb815Sopenharmony_ci{ 161425bb815Sopenharmony_ci assert(a === 6) 162425bb815Sopenharmony_ci} 163425bb815Sopenharmony_cif20([6]) 164425bb815Sopenharmony_cicheck_reference_error("f20()"); 165