v8/test/mjsunit/regress/regress-4377.js
littledan 45e2628df7 Add a separate scope for switch
The ES2015 specification for switch statements 13.12.11 specifies that
they get their own lexical scope. This patch introduces such a scope
through a complex desugaring in terms of blocks, done so that Crankshaft
does not have to be updated to support multiple constructs providing
scopes.

Recommitting this patch after a bug fix in Crankshaft to allow a
desugaring with certain elements missing a source location:
https://codereview.chromium.org/1313443002

BUG=v8:4377
LOG=Y
R=adamk

Review URL: https://codereview.chromium.org/1309163003

Cr-Commit-Position: refs/heads/master@{#30340}
2015-08-24 18:57:20 +00:00

46 lines
812 B
JavaScript

// Copyright 2015 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// See: http://code.google.com/p/v8/issues/detail?id=4377
// Switch statements should introduce their own lexical scope
'use strict';
switch (1) { case 1: let x = 2; }
assertThrows(function() { return x; }, ReferenceError);
{
let result;
let x = 1;
switch (x) {
case 1:
let x = 2;
result = x;
break;
default:
result = 0;
break;
}
assertEquals(1, x);
assertEquals(2, result);
}
{
let result;
let x = 1;
switch (eval('x')) {
case 1:
let x = 2;
result = x;
break;
default:
result = 0;
break;
}
assertEquals(1, x);
assertEquals(2, result);
}