| Index: test/mjsunit/strong/object-delete.js
|
| diff --git a/test/mjsunit/strong/object-delete.js b/test/mjsunit/strong/object-delete.js
|
| deleted file mode 100644
|
| index a655b65c78fa2bfedd08d767bb43760765ce7167..0000000000000000000000000000000000000000
|
| --- a/test/mjsunit/strong/object-delete.js
|
| +++ /dev/null
|
| @@ -1,255 +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
|
| -
|
| -// TODO(conradw): Track implementation of strong bit for other objects, add
|
| -// tests.
|
| -
|
| -function getSloppyObjects() {
|
| - return [(function(){}), ({})];
|
| -}
|
| -
|
| -function getStrictObjects() {
|
| - "use strict";
|
| - return [(function(){}), ({})];
|
| -}
|
| -
|
| -function getWeakObjects() {
|
| - return getSloppyObjects().concat(getStrictObjects());
|
| -}
|
| -
|
| -function getStrongObjects() {
|
| - "use strong";
|
| -// Strong functions can't have properties added to them, and will be tested as a
|
| -// special case.
|
| - return [({})];
|
| -}
|
| -
|
| -function strongFunction() {
|
| - "use strong";
|
| -}
|
| -
|
| -function deleteFromObjectSloppy(o) {
|
| - return delete o.foo;
|
| -}
|
| -
|
| -function deleteFromObjectKeyedSloppy(o) {
|
| - return delete o["foo"];
|
| -}
|
| -
|
| -function deleteFromObjectKeyedVarSloppy(o) {
|
| - var a = "foo";
|
| - return delete o[a];
|
| -}
|
| -
|
| -function deleteFromObjectKeyedComputedSloppy(o) {
|
| - var a = "o";
|
| - return delete o["fo" + a];
|
| -}
|
| -
|
| -function deleteFromObjectWith(o) {
|
| - with (o) {
|
| - return delete foo;
|
| - }
|
| -}
|
| -
|
| -function deleteFromObjectElementSloppy(o) {
|
| - return delete o[0];
|
| -}
|
| -
|
| -function deleteFromObjectElementVarSloppy(o) {
|
| - var a = 0;
|
| - return delete o[a];
|
| -}
|
| -
|
| -function deleteFromObjectElementSparseSloppy(o) {
|
| - return delete o[100000];
|
| -}
|
| -
|
| -function deleteFromObjectElementVarSloppy(o) {
|
| - var a = 0;
|
| - return delete o[a];
|
| -}
|
| -
|
| -function deleteFromObjectElementSparseVarSloppy(o) {
|
| - var a = 100000;
|
| - return delete o[a];
|
| -}
|
| -
|
| -function deleteFromObjectStrict(o) {
|
| - "use strict";
|
| - return delete o.foo;
|
| -}
|
| -
|
| -function deleteFromObjectKeyedStrict(o) {
|
| - "use strict";
|
| - return delete o["foo"];
|
| -}
|
| -
|
| -function deleteFromObjectKeyedVarStrict(o) {
|
| - "use strict";
|
| - var a = "foo";
|
| - return delete o[a];
|
| -}
|
| -
|
| -function deleteFromObjectKeyedComputedStrict(o) {
|
| - "use strict";
|
| - var a = "o";
|
| - return delete o["fo" + a];
|
| -}
|
| -
|
| -function deleteFromObjectElementStrict(o) {
|
| - "use strict";
|
| - return delete o[0];
|
| -}
|
| -
|
| -function deleteFromObjectElementSparseStrict(o) {
|
| - "use strict";
|
| - return delete o[100000];
|
| -}
|
| -
|
| -function deleteFromObjectElementVarStrict(o) {
|
| - "use strict";
|
| - var a = 0;
|
| - return delete o[a];
|
| -}
|
| -
|
| -function deleteFromObjectElementSparseVarStrict(o) {
|
| - "use strict";
|
| - var a = 100000;
|
| - return delete o[a];
|
| -}
|
| -
|
| -function testStrongObjectDelete() {
|
| - "use strict";
|
| -
|
| - let deletePropertyFuncsSloppy = [
|
| - deleteFromObjectSloppy,
|
| - deleteFromObjectKeyedSloppy,
|
| - deleteFromObjectKeyedVarSloppy,
|
| - deleteFromObjectKeyedComputedSloppy,
|
| - deleteFromObjectWith
|
| - ];
|
| - let deletePropertyFuncsStrict = [
|
| - deleteFromObjectStrict,
|
| - deleteFromObjectKeyedStrict,
|
| - deleteFromObjectKeyedVarStrict,
|
| - deleteFromObjectKeyedComputedStrict
|
| - ];
|
| - let deleteElementFuncsSloppy = [
|
| - deleteFromObjectElementSloppy,
|
| - deleteFromObjectElementVarSloppy
|
| - ];
|
| - let deleteElementSparseFuncsSloppy = [
|
| - deleteFromObjectElementSparseSloppy,
|
| - deleteFromObjectElementSparseVarSloppy
|
| - ];
|
| - let deleteElementFuncsStrict = [
|
| - deleteFromObjectElementStrict,
|
| - deleteFromObjectElementVarStrict
|
| - ];
|
| - let deleteElementSparseFuncsStrict = [
|
| - deleteFromObjectElementSparseStrict,
|
| - deleteFromObjectElementSparseVarStrict
|
| - ];
|
| - let deleteFuncs = deletePropertyFuncsSloppy.concat(
|
| - deletePropertyFuncsStrict, deleteElementFuncsSloppy,
|
| - deleteElementSparseFuncsSloppy, deleteElementFuncsStrict,
|
| - deleteElementSparseFuncsStrict);
|
| -
|
| - for (let deleteFunc of deleteFuncs) {
|
| - assertTrue(deleteFunc(strongFunction));
|
| - }
|
| -
|
| - let testCasesSloppy = [
|
| - [deletePropertyFuncsSloppy, "foo"],
|
| - [deleteElementFuncsSloppy, "0"],
|
| - [deleteElementSparseFuncsSloppy, "100000"]
|
| - ];
|
| -
|
| - let testCasesStrict = [
|
| - [deletePropertyFuncsStrict, "foo"],
|
| - [deleteElementFuncsStrict, "0"],
|
| - [deleteElementSparseFuncsStrict, "100000"]
|
| - ];
|
| -
|
| - let propDescs = [
|
| - {configurable: true, value: "bar"},
|
| - {configurable: true, value: 1},
|
| - {configurable: true, enumerable: true, writable: true, value: "bar"},
|
| - {configurable: true, enumerable: true, writable: true, value: 1},
|
| - {configurable: true, get: (function(){return 0}), set: (function(x){})}
|
| - ];
|
| -
|
| - for (let propDesc of propDescs) {
|
| - for (let testCase of testCasesSloppy) {
|
| - let name = testCase[1];
|
| - for (let deleteFunc of testCase[0]) {
|
| - for (let o of getWeakObjects()) {
|
| - Object.defineProperty(o, name, propDesc);
|
| - assertTrue(delete o["bar"]);
|
| - assertTrue(delete o[5000]);
|
| - assertTrue(deleteFunc(o));
|
| - assertFalse(o.hasOwnProperty(name));
|
| - %OptimizeFunctionOnNextCall(deleteFunc);
|
| - Object.defineProperty(o, name, propDesc);
|
| - assertTrue(deleteFunc(o));
|
| - assertFalse(o.hasOwnProperty(name));
|
| - %DeoptimizeFunction(deleteFunc);
|
| - Object.defineProperty(o, name, propDesc);
|
| - assertTrue(deleteFunc(o));
|
| - assertFalse(o.hasOwnProperty(name));
|
| - }
|
| - for (let o of getStrongObjects()) {
|
| - Object.defineProperty(o, name, propDesc);
|
| - assertTrue(delete o["bar"]);
|
| - assertTrue(delete o[5000]);
|
| - assertFalse(deleteFunc(o));
|
| - assertTrue(o.hasOwnProperty(name));
|
| - %OptimizeFunctionOnNextCall(deleteFunc);
|
| - assertFalse(deleteFunc(o));
|
| - assertTrue(o.hasOwnProperty(name));
|
| - %DeoptimizeFunction(deleteFunc);
|
| - assertFalse(deleteFunc(o));
|
| - assertTrue(o.hasOwnProperty(name));
|
| - }
|
| - }
|
| - }
|
| - for (let testCase of testCasesStrict) {
|
| - let name = testCase[1];
|
| - for (let deleteFunc of testCase[0]) {
|
| - for (let o of getWeakObjects()) {
|
| - Object.defineProperty(o, name, propDesc);
|
| - assertTrue(delete o["bar"]);
|
| - assertTrue(delete o[5000]);
|
| - assertTrue(deleteFunc(o));
|
| - assertFalse(o.hasOwnProperty(name));
|
| - %OptimizeFunctionOnNextCall(deleteFunc);
|
| - Object.defineProperty(o, name, propDesc);
|
| - assertTrue(deleteFunc(o));
|
| - assertFalse(o.hasOwnProperty(name));
|
| - %DeoptimizeFunction(deleteFunc);
|
| - Object.defineProperty(o, name, propDesc);
|
| - assertTrue(deleteFunc(o));
|
| - assertFalse(o.hasOwnProperty(name));
|
| - }
|
| - for (let o of getStrongObjects()) {
|
| - Object.defineProperty(o, name, propDesc);
|
| - assertTrue(delete o["bar"]);
|
| - assertTrue(delete o[5000]);
|
| - assertThrows(function(){deleteFunc(o)}, TypeError);
|
| - assertTrue(o.hasOwnProperty(name));
|
| - %OptimizeFunctionOnNextCall(deleteFunc);
|
| - assertThrows(function(){deleteFunc(o)}, TypeError);
|
| - assertTrue(o.hasOwnProperty(name));
|
| - %DeoptimizeFunction(deleteFunc);
|
| - assertThrows(function(){deleteFunc(o)}, TypeError);
|
| - assertTrue(o.hasOwnProperty(name));
|
| - }
|
| - }
|
| - }
|
| - }
|
| -}
|
| -testStrongObjectDelete();
|
|
|