// Reduced and tweaked code from const-semantics.js to reproduce https://bugs.webkit.org/show_bug.cgi?id=190693 easily. "use strict"; function truth() { return true; } noInline(truth); function assert(cond) { if (!cond) throw new Error("broke assertion"); } noInline(assert); function shouldThrowInvalidConstAssignment(f) { var threw = false; try { f(); } catch(e) { if (e.name.indexOf("TypeError") !== -1 && e.message.indexOf("readonly") !== -1) threw = true; } assert(threw); } noInline(shouldThrowInvalidConstAssignment); // ========== tests below =========== const NUM_LOOPS = 6000; ;(function() { function taz() { const x = 20; shouldThrowInvalidConstAssignment(function() { x = 20; }); assert(x === 20); shouldThrowInvalidConstAssignment(function() { x += 20; }); assert(x === 20); shouldThrowInvalidConstAssignment(function() { x -= 20; }); assert(x === 20); shouldThrowInvalidConstAssignment(function() { x *= 20; }); assert(x === 20); shouldThrowInvalidConstAssignment(function() { x /= 20; }); assert(x === 20); shouldThrowInvalidConstAssignment(function() { x >>= 20; }); assert(x === 20); shouldThrowInvalidConstAssignment(function() { x <<= 20; }); assert(x === 20); shouldThrowInvalidConstAssignment(function() { x ^= 20; }); assert(x === 20); shouldThrowInvalidConstAssignment(function() { x++; }); assert(x === 20); shouldThrowInvalidConstAssignment(function() { x--; }); assert(x === 20); shouldThrowInvalidConstAssignment(function() { ++x; }); assert(x === 20); shouldThrowInvalidConstAssignment(function() { --x; }); assert(x === 20); } for (var i = 0; i < NUM_LOOPS; i++) { taz(); } })(); for(var i = 0; i < 1e6; ++i);