diff options
Diffstat (limited to 'deps/v8/test/mjsunit/regress/regress-1170.js')
-rw-r--r-- | deps/v8/test/mjsunit/regress/regress-1170.js | 64 |
1 files changed, 45 insertions, 19 deletions
diff --git a/deps/v8/test/mjsunit/regress/regress-1170.js b/deps/v8/test/mjsunit/regress/regress-1170.js index 66ed9f29e2..8c5f6f8ab4 100644 --- a/deps/v8/test/mjsunit/regress/regress-1170.js +++ b/deps/v8/test/mjsunit/regress/regress-1170.js @@ -25,48 +25,74 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// Flags: --es52_globals + var setter_value = 0; -__proto__.__defineSetter__("a", function(v) { setter_value = v; }); +this.__defineSetter__("a", function(v) { setter_value = v; }); eval("var a = 1"); assertEquals(1, setter_value); -assertFalse(this.hasOwnProperty("a")); +assertFalse("value" in Object.getOwnPropertyDescriptor(this, "a")); eval("with({}) { eval('var a = 2') }"); assertEquals(2, setter_value); -assertFalse(this.hasOwnProperty("a")); +assertFalse("value" in Object.getOwnPropertyDescriptor(this, "a")); // Function declarations are treated specially to match Safari. We do // not call setters for them. +this.__defineSetter__("a", function(v) { assertUnreachable(); }); eval("function a() {}"); -assertTrue(this.hasOwnProperty("a")); +assertTrue("value" in Object.getOwnPropertyDescriptor(this, "a")); -__proto__.__defineSetter__("b", function(v) { assertUnreachable(); }); -var exception = false; +this.__defineSetter__("b", function(v) { setter_value = v; }); try { - eval("const b = 23"); + eval("const b = 3"); } catch(e) { - exception = true; - assertTrue(/TypeError/.test(e)); + assertUnreachable(); } -assertFalse(exception); +assertEquals(3, setter_value); -exception = false; try { eval("with({}) { eval('const b = 23') }"); } catch(e) { - exception = true; - assertTrue(/TypeError/.test(e)); + assertInstanceof(e, TypeError); } -assertTrue(exception); -__proto__.__defineSetter__("c", function(v) { throw 42; }); -exception = false; +this.__defineSetter__("c", function(v) { throw 42; }); try { eval("var c = 1"); + assertUnreachable(); } catch(e) { - exception = true; assertEquals(42, e); - assertFalse(this.hasOwnProperty("c")); + assertFalse("value" in Object.getOwnPropertyDescriptor(this, "c")); +} + + + + +__proto__.__defineSetter__("aa", function(v) { assertUnreachable(); }); +eval("var aa = 1"); +assertTrue(this.hasOwnProperty("aa")); + +__proto__.__defineSetter__("bb", function(v) { assertUnreachable(); }); +eval("with({}) { eval('var bb = 2') }"); +assertTrue(this.hasOwnProperty("bb")); + +// Function declarations are treated specially to match Safari. We do +// not call setters for them. +__proto__.__defineSetter__("cc", function(v) { assertUnreachable(); }); +eval("function cc() {}"); +assertTrue(this.hasOwnProperty("cc")); + +__proto__.__defineSetter__("dd", function(v) { assertUnreachable(); }); +try { + eval("const dd = 23"); +} catch(e) { + assertUnreachable(); +} + +try { + eval("with({}) { eval('const dd = 23') }"); +} catch(e) { + assertInstanceof(e, TypeError); } -assertTrue(exception); |