Redeclaration of var over let/const/class should be a syntax error.
[WebKit-https.git] / JSTests / stress / block-scope-redeclarations.js
1 function shouldNotThrow(script) {
2   eval(script);
3 }
4
5 function shouldThrowSyntaxError(script) {
6     let error;
7     try {
8         eval(script);
9     } catch (e) {
10         error = e;
11     }
12
13     if (!(error instanceof SyntaxError))
14         throw new Error('Expected SyntaxError!');
15 }
16
17 shouldThrowSyntaxError('{ var x; let x; }');
18 shouldThrowSyntaxError('{ { var x; } let x; }');
19 shouldThrowSyntaxError('{ { { var x; } } let x; }');
20 shouldThrowSyntaxError('{ let x; var x; }');
21 shouldThrowSyntaxError('{ let x; { var x; } }');
22 shouldThrowSyntaxError('{ let x; { { var x; } } }');
23
24 shouldNotThrow('{ var x; { let x; } }');
25 shouldNotThrow('{ var x; { { let x; } } }');
26 shouldNotThrow('{ { let x; } var x; }');
27 shouldNotThrow('{ { { let x; } } var x; }');
28
29 shouldThrowSyntaxError('{ var x; const x = 0; }');
30 shouldThrowSyntaxError('{ { var x; } const x = 0; }');
31 shouldThrowSyntaxError('{ { { var x; } } const x = 0; }');
32 shouldThrowSyntaxError('{ const x = 0; var x; }');
33 shouldThrowSyntaxError('{ const x = 0; { var x; } }');
34 shouldThrowSyntaxError('{ const x = 0; { { var x; } } }');
35
36 shouldNotThrow('{ var x; { const x = 0; } }');
37 shouldNotThrow('{ var x; { { const x = 0; } } }');
38 shouldNotThrow('{ { const x = 0; } var x; }');
39 shouldNotThrow('{ { { const x = 0; } } var x; }');