1// Copyright JS Foundation and other contributors, http://js.foundation 2// 3// Licensed under the Apache License, Version 2.0 (the "License"); 4// you may not use this file except in compliance with the License. 5// You may obtain a copy of the License at 6// 7// http://www.apache.org/licenses/LICENSE-2.0 8// 9// Unless required by applicable law or agreed to in writing, software 10// distributed under the License is distributed on an "AS IS" BASIS 11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12// See the License for the specific language governing permissions and 13// limitations under the License. 14 15function check_reference_error(code) 16{ 17 try { 18 eval(code); 19 assert(false); 20 } catch (e) { 21 assert(e instanceof ReferenceError); 22 } 23} 24 25function f1(a = a) 26{ 27 assert(a === 1) 28} 29f1(1) 30check_reference_error("f1()"); 31 32function f2([a] = 1 + a) 33{ 34 assert(a === 2) 35} 36f2([2]) 37check_reference_error("f2()"); 38 39function f3([a = !a]) 40{ 41 assert(a === 2) 42} 43f3([2]) 44check_reference_error("f3([])"); 45 46function f4([[a]] = a) 47{ 48 assert(a === 3) 49} 50f4([[3]]) 51check_reference_error("f4()"); 52 53function f5([[a], b = a] = a) 54{ 55 assert(a === 4 && b === 4) 56} 57f5([[4]]) 58check_reference_error("f5()") 59 60function f6(a = 3 - ((b)), b) 61{ 62 assert(a === 1 && b === 2) 63} 64f6(1, 2) 65check_reference_error("f6(undefined, 2)"); 66 67function f7(a = b(), [b]) 68{ 69 assert(a === 3 && b === 4) 70} 71f7(3, [4]) 72check_reference_error("f7(undefined, [4])"); 73 74function f8(a = (function () { return a * 2 })()) 75{ 76 assert(a === 1) 77} 78f8(1) 79check_reference_error("f8()"); 80 81function f9({a = b, b:{b}}) 82{ 83 assert(a === 2 && b === 3) 84} 85f9({a:2, b:{b:3}}) 86check_reference_error("f9({b:{b:3}})"); 87 88function f10(a = eval("a")) 89{ 90 assert(a === 1) 91} 92f10(1) 93check_reference_error("f10()"); 94 95function f11([a] = eval("a")) 96{ 97 assert(a === 2) 98} 99f11([2]) 100check_reference_error("f11()"); 101 102function f12({a} = eval("a")) 103{ 104 assert(a === 3) 105} 106f12({a:3}) 107check_reference_error("f12()"); 108 109function f13(a = arguments) 110{ 111 assert(a[0] === undefined) 112 assert(a[1] === 4) 113 arguments[0] = 5 114 assert(a[0] === 5) 115} 116f13(undefined, 4) 117 118function f14(a, b = function() { return a; }(), c = (() => a)()) 119{ 120 assert(a === 6 && b === 6 && c === 6) 121} 122f14(6) 123 124function f15(a = (() => b)(), b) 125{ 126 assert(a === 1 && b === 2) 127} 128f15(1, 2) 129check_reference_error("f15(undefined, 2)"); 130 131var f16 = (a = a) => 132{ 133 assert(a === 1) 134} 135f16(1) 136check_reference_error("f16()"); 137 138var f17 = ([[a]] = a) => 139{ 140 assert(a === 2) 141} 142f17([[2]]) 143check_reference_error("f17()"); 144 145var f18 = ({a = b, b:{b}}) => 146{ 147 assert(a === 3 && b === 4) 148} 149f18({a:3, b:{b:4}}) 150check_reference_error("f18({b:{b:4}})"); 151 152var f19 = (a = eval("a")) => 153{ 154 assert(a === 5) 155} 156f19(5) 157check_reference_error("f19()"); 158 159var f20 = ([a] = eval("a")) => 160{ 161 assert(a === 6) 162} 163f20([6]) 164check_reference_error("f20()"); 165