michael@0: /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ michael@0: /* michael@0: * Any copyright is dedicated to the Public Domain. michael@0: * http://creativecommons.org/licenses/publicdomain/ michael@0: */ michael@0: michael@0: var c = 0; michael@0: michael@0: function f(a) { michael@0: const b = a; michael@0: try { michael@0: eval('"use strict"; b = 1 + a; c = 1'); michael@0: assertEq(0, 1); michael@0: } catch (e) { michael@0: assertEq(e.name, 'TypeError'); michael@0: assertEq(0, c); michael@0: assertEq(a, b); michael@0: } michael@0: } michael@0: michael@0: var w = 42; michael@0: f(w); michael@0: michael@0: c = 2; michael@0: try { michael@0: eval('"use strict"; function g(x) { const y = x; y = 1 + x; } c = 3'); michael@0: assertEq(0, 1); michael@0: } catch (e) { michael@0: assertEq(e.name, 'TypeError'); michael@0: assertEq(2, c); michael@0: } michael@0: michael@0: c = 4; michael@0: try { michael@0: eval('"use strict"; const z = w; z = 1 + w; c = 5'); michael@0: assertEq(0, 1); michael@0: } catch (e) { michael@0: assertEq(e.name, 'TypeError'); michael@0: assertEq(4, c); michael@0: assertEq('z' in this, false); michael@0: } michael@0: michael@0: reportCompare(0, 0, "ok");