function raisesException(exception) { return function (code) { eval(code); }; }; function obj() { var o = { assertEq: true, y: 1 }; Object.defineProperty(o, 'x', { writable: false }); return o; } function in_strict_with(expr) { return "with(obj()) { (function () { 'use strict'; " + expr + " })(); }"; } try { assertEq(raisesException(TypeError)(in_strict_with('x++;')), true); } catch (e) {}