• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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