ed2be747ad
When accessor getter callback is called the v8::PropertyCallbackInfo::ShouldThrowOnError() is always false, since according to ES6 there's no difference between strict and non-strict property loads. For the setter case the v8::PropertyCallbackInfo::ShouldThrowOnError() returns true if the property is set in strict context. Interceptors follow same idea: for getter, enumerator and query callbacks the v8::PropertyCallbackInfo::ShouldThrowOnError() is always false, and for setter and deleter callback the v8::PropertyCallbackInfo::ShouldThrowOnError() returns true in strict context. This CL also cleans up the CallApiGetterStub and removes bogus asserts from [arm] Push(reg1, reg2, ..., regN) that prevented from pushing a set of registers containing duplicates. BUG=v8:4267 LOG=Y Committed: https://crrev.com/1d3e837fcbbd9d9fd5e72dfe85dfd47c025f3c9f Cr-Commit-Position: refs/heads/master@{#33438} Review URL: https://codereview.chromium.org/1587073003 Cr-Commit-Position: refs/heads/master@{#33461}
17 lines
460 B
JavaScript
17 lines
460 B
JavaScript
// Copyright 2016 the V8 project authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
// Flags: --allow-natives-syntax
|
|
|
|
"use strict";
|
|
|
|
var a = [];
|
|
Object.defineProperty(a, "0", {configurable: false, value: 10});
|
|
assertEquals(1, a.length);
|
|
var setter = ()=>{ a.length = 0; };
|
|
assertThrows(setter);
|
|
assertThrows(setter);
|
|
%OptimizeFunctionOnNextCall(setter);
|
|
assertThrows(setter);
|