| Index: test/mjsunit/strong/load-property-mutate-backing-store.js
|
| diff --git a/test/mjsunit/strong/load-property-mutate-backing-store.js b/test/mjsunit/strong/load-property-mutate-backing-store.js
|
| deleted file mode 100644
|
| index 5ed45530c4f4600a819e6f631b297bd2cce5f755..0000000000000000000000000000000000000000
|
| --- a/test/mjsunit/strong/load-property-mutate-backing-store.js
|
| +++ /dev/null
|
| @@ -1,174 +0,0 @@
|
| -// Copyright 2015 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: --strong-mode --allow-natives-syntax
|
| -
|
| -function getSloppyArguments() {
|
| - return arguments;
|
| -}
|
| -
|
| -function getObjects() {
|
| - "use strict";
|
| - return [
|
| - {},
|
| - Object(""),
|
| - [],
|
| - (function(){}),
|
| - (class Foo {}),
|
| - getSloppyArguments(),
|
| - arguments,
|
| - new Date(),
|
| - // TODO(conradw): uncomment once Object.defineProperty is fixed.
|
| - // new Uint32Array(0)
|
| - ];
|
| -}
|
| -
|
| -function readFromObjectSloppy(o) {
|
| - return o.foo;
|
| -}
|
| -
|
| -function readFromObjectKeyedSloppy(o) {
|
| - return o["foo"];
|
| -}
|
| -
|
| -function readFromObjectKeyedVarSloppy(o) {
|
| - var a = "foo";
|
| - return o[a];
|
| -}
|
| -
|
| -function readFromObjectKeyedComputedSloppy(o) {
|
| - var a = "o";
|
| - return o["fo" + a];
|
| -}
|
| -
|
| -function readFromObjectStrong(o) {
|
| - "use strong";
|
| - return o.foo;
|
| -}
|
| -
|
| -function readFromObjectKeyedStrong(o) {
|
| - "use strong";
|
| - return o["foo"];
|
| -}
|
| -
|
| -function readFromObjectKeyedLetStrong(o) {
|
| - "use strong";
|
| - let a = "foo";
|
| - return o[a];
|
| -}
|
| -
|
| -function readFromObjectKeyedComputedStrong(o) {
|
| - "use strong";
|
| - let a = "o";
|
| - return o["fo" + a];
|
| -}
|
| -
|
| -function getDescs(x) {
|
| - return [
|
| - {value: x},
|
| - {configurable: true, enumerable: true, writable: true, value: x},
|
| - {configurable: true, enumerable: true, get: (function() {return x}) },
|
| - ];
|
| -}
|
| -
|
| -function assertStrongSemantics(func, object) {
|
| - %DeoptimizeFunction(func);
|
| - %ClearFunctionTypeFeedback(func);
|
| - assertThrows(function(){func(object)}, TypeError);
|
| - assertThrows(function(){func(object)}, TypeError);
|
| - assertThrows(function(){func(object)}, TypeError);
|
| - %OptimizeFunctionOnNextCall(func);
|
| - assertThrows(function(){func(object)}, TypeError);
|
| - %DeoptimizeFunction(func);
|
| - assertThrows(function(){func(object)}, TypeError);
|
| -}
|
| -
|
| -function assertSloppySemantics(func, object) {
|
| - %DeoptimizeFunction(func);
|
| - %ClearFunctionTypeFeedback(func);
|
| - assertDoesNotThrow(function(){func(object)});
|
| - assertDoesNotThrow(function(){func(object)});
|
| - assertDoesNotThrow(function(){func(object)});
|
| - %OptimizeFunctionOnNextCall(func);
|
| - assertDoesNotThrow(function(){func(object)});
|
| - %DeoptimizeFunction(func);
|
| - assertDoesNotThrow(function(){func(object)});
|
| -}
|
| -
|
| -(function () {
|
| - "use strict";
|
| -
|
| - let goodKeys = [
|
| - "foo"
|
| - ]
|
| -
|
| - let badKeys = [
|
| - "bar",
|
| - "1",
|
| - "100001",
|
| - "3000000001",
|
| - "5000000001"
|
| - ];
|
| -
|
| - let values = [
|
| - "string",
|
| - 1,
|
| - 100001,
|
| - 30000000001,
|
| - 50000000001,
|
| - NaN,
|
| - {},
|
| - undefined
|
| - ];
|
| -
|
| - let badAccessorDescs = [
|
| - { set: (function(){}) },
|
| - { configurable: true, enumerable: true, set: (function(){}) }
|
| - ];
|
| -
|
| - let readSloppy = [
|
| - readFromObjectSloppy,
|
| - readFromObjectKeyedSloppy,
|
| - readFromObjectKeyedVarSloppy,
|
| - readFromObjectKeyedComputedSloppy
|
| - ];
|
| -
|
| - let readStrong = [
|
| - readFromObjectStrong,
|
| - readFromObjectKeyedStrong,
|
| - readFromObjectKeyedLetStrong,
|
| - readFromObjectKeyedComputedStrong
|
| - ];
|
| -
|
| - let dummyProto = {};
|
| - for (let key of goodKeys) {
|
| - Object.defineProperty(dummyProto, key, { value: undefined });
|
| - }
|
| -
|
| - // After altering the backing store, accessing a missing property should still
|
| - // throw.
|
| - for (let key of badKeys) {
|
| - for (let value of values) {
|
| - for (let desc of getDescs(value)) {
|
| - for (let object of getObjects()) {
|
| - Object.defineProperty(object, key, desc);
|
| - for (let func of readStrong) {
|
| - assertStrongSemantics(func, object);
|
| - }
|
| - for (let func of readSloppy) {
|
| - assertSloppySemantics(func, object);
|
| - }
|
| - // Accessing a property which is on the prototype chain of the object
|
| - // should not throw.
|
| - object.__proto__ = dummyProto;
|
| - for (let key of goodKeys) {
|
| - for (let func of readStrong.concat(readSloppy)) {
|
| - assertSloppySemantics(func, object);
|
| - }
|
| - }
|
| - }
|
| - }
|
| - }
|
| - }
|
| -})();
|
|
|