function assert(b) { if (!b) throw new Error("bad assertion."); } let targets = [Function, String, Array, Set, Map, WeakSet, WeakMap, RegExp, Number, Promise, Date, Boolean, Error, TypeError, SyntaxError, ArrayBuffer, Int32Array, Int8Array, Uint8Array, Uint8ClampedArray, Int16Array, Uint16Array, Uint32Array, Float32Array, Float64Array, DataView]; for (let target of targets) { let error = null; let called = false; let handler = { get: function(theTarget, propName) { assert(propName === "prototype"); error = new Error; called = true; throw error; } }; let proxy = new Proxy(target, handler); for (let i = 0; i < 500; i++) { let threw = false; try { new proxy; } catch(e) { threw = true; assert(e === error); error = null; } assert(threw); assert(called); called = false; } }