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 15 function check_reference_error(code) 16 { 17 try { 18 eval(code); 19 assert(false); 20 } catch (e) { 21 assert(e instanceof ReferenceError); 22 } 23 } 24 25 function f1(a = a) 26 { 27 assert(a === 1) 28 } 29 f1(1) 30 check_reference_error("f1()"); 31 32 function f2([a] = 1 + a) 33 { 34 assert(a === 2) 35 } 36 f2([2]) 37 check_reference_error("f2()"); 38 39 function f3([a = !a]) 40 { 41 assert(a === 2) 42 } 43 f3([2]) 44 check_reference_error("f3([])"); 45 46 function f4([[a]] = a) 47 { 48 assert(a === 3) 49 } 50 f4([[3]]) 51 check_reference_error("f4()"); 52 53 function f5([[a], b = a] = a) 54 { 55 assert(a === 4 && b === 4) 56 } 57 f5([[4]]) 58 check_reference_error("f5()") 59 60 function f6(a = 3 - ((b)), b) 61 { 62 assert(a === 1 && b === 2) 63 } 64 f6(1, 2) 65 check_reference_error("f6(undefined, 2)"); 66 67 function f7(a = b(), [b]) 68 { 69 assert(a === 3 && b === 4) 70 } 71 f7(3, [4]) 72 check_reference_error("f7(undefined, [4])"); 73 74 function f8(a = (function () { return a * 2 })()) 75 { 76 assert(a === 1) 77 } 78 f8(1) 79 check_reference_error("f8()"); 80 81 function f9({a = b, b:{b}}) 82 { 83 assert(a === 2 && b === 3) 84 } 85 f9({a:2, b:{b:3}}) 86 check_reference_error("f9({b:{b:3}})"); 87 88 function f10(a = eval("a")) 89 { 90 assert(a === 1) 91 } 92 f10(1) 93 check_reference_error("f10()"); 94 95 function f11([a] = eval("a")) 96 { 97 assert(a === 2) 98 } 99 f11([2]) 100 check_reference_error("f11()"); 101 102 function f12({a} = eval("a")) 103 { 104 assert(a === 3) 105 } 106 f12({a:3}) 107 check_reference_error("f12()"); 108 109 function f13(a = arguments) 110 { 111 assert(a[0] === undefined) 112 assert(a[1] === 4) 113 arguments[0] = 5 114 assert(a[0] === 5) 115 } 116 f13(undefined, 4) 117 118 function f14(a, b = function() { return a; }(), c = (() => a)()) 119 { 120 assert(a === 6 && b === 6 && c === 6) 121 } 122 f14(6) 123 124 function f15(a = (() => b)(), b) 125 { 126 assert(a === 1 && b === 2) 127 } 128 f15(1, 2) 129 check_reference_error("f15(undefined, 2)"); 130 131 var f16 = (a = a) => 132 { 133 assert(a === 1) 134 } 135 f16(1) 136 check_reference_error("f16()"); 137 138 var f17 = ([[a]] = a) => 139 { 140 assert(a === 2) 141 } 142 f17([[2]]) 143 check_reference_error("f17()"); 144 145 var f18 = ({a = b, b:{b}}) => 146 { 147 assert(a === 3 && b === 4) 148 } 149 f18({a:3, b:{b:4}}) 150 check_reference_error("f18({b:{b:4}})"); 151 152 var f19 = (a = eval("a")) => 153 { 154 assert(a === 5) 155 } 156 f19(5) 157 check_reference_error("f19()"); 158 159 var f20 = ([a] = eval("a")) => 160 { 161 assert(a === 6) 162 } 163 f20([6]) 164 check_reference_error("f20()"); 165