function assertThrowsReferenceError(f) { var err; try { f(); } catch (e) { err = e; } assertEq(err instanceof ReferenceError, true); } function f() { switch (0) { case 1: let x case function() { print(x) }(): } } assertThrowsReferenceError(f); function g() { switch (0) { case 1: let x; case 0: var inner = function () { print(x); } inner(); break; } } assertThrowsReferenceError(g); function h() { switch (0) { case 0: var inner = function () { print(x); } inner(); case 1: let x; } } assertThrowsReferenceError(h); // Tests that a dominating lexical doesn't throw. function F() { switch (0) { case 0: let x = 42; var inner = function () { assertEq(x, 42); } inner(); } } F();