Index: test/mjsunit/strong/load-element-mutate-backing-store.js |
diff --git a/test/mjsunit/strong/load-element-mutate-backing-store.js b/test/mjsunit/strong/load-element-mutate-backing-store.js |
deleted file mode 100644 |
index f3465028b7c45192bd28cba8ae0b065247b7c2d7..0000000000000000000000000000000000000000 |
--- a/test/mjsunit/strong/load-element-mutate-backing-store.js |
+++ /dev/null |
@@ -1,239 +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): add tests for non-inheritance once semantics are implemented. |
-function getNonInheritingObjects() { |
- "use strong"; |
- return [ |
- Object(""), |
- [], |
- // TODO(conradw): uncomment and correct test once Object.defineProperty is |
- // fixed. |
- // new Uint32Array(0) |
- ]; |
-} |
- |
-function readFromObjectElementSloppy(o) { |
- return o[0]; |
-} |
- |
-function readFromObjectElementSparseSloppy(o) { |
- return o[100000]; |
-} |
- |
-function readFromObjectElementNonSmiSloppy(o) { |
- return o[3000000000]; |
-} |
- |
-function readFromObjectNonIndexSloppy(o) { |
- return o[5000000000]; |
-} |
- |
-function readFromObjectElementVarSloppy(o) { |
- var a = 0; |
- return o[a]; |
-} |
- |
-function readFromObjectElementSparseVarSloppy(o) { |
- var a = 100000; |
- return o[a]; |
-} |
- |
-function readFromObjectElementNonSmiVarSloppy(o) { |
- var a = 3000000000; |
- return o[a]; |
-} |
- |
-function readFromObjectNonIndexVarSloppy(o) { |
- var a = 5000000000; |
- return o[a]; |
-} |
- |
-function readFromObjectElementStrong(o) { |
- "use strong"; |
- return o[0]; |
-} |
- |
-function readFromObjectElementSparseStrong(o) { |
- "use strong"; |
- return o[100000]; |
-} |
- |
-function readFromObjectElementNonSmiStrong(o) { |
- "use strong"; |
- return o[3000000000]; |
-} |
- |
-function readFromObjectNonIndexStrong(o) { |
- "use strong"; |
- return o[5000000000]; |
-} |
- |
-function readFromObjectElementLetStrong(o) { |
- "use strong"; |
- let a = 0; |
- return o[a]; |
-} |
- |
-function readFromObjectElementSparseLetStrong(o) { |
- "use strong"; |
- let a = 100000; |
- return o[a]; |
-} |
- |
-function readFromObjectElementNonSmiLetStrong(o) { |
- "use strong"; |
- let a = 3000000000; |
- return o[a]; |
-} |
- |
-function readFromObjectNonIndexLetStrong(o) { |
- "use strong"; |
- let a = 5000000000; |
- return o[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 = [ |
- "0", |
- "100000", |
- "3000000000", |
- "5000000000" |
- ] |
- |
- 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 = [ |
- readFromObjectElementSloppy, |
- readFromObjectElementSparseSloppy, |
- readFromObjectElementNonSmiSloppy, |
- readFromObjectNonIndexSloppy, |
- readFromObjectElementVarSloppy, |
- readFromObjectElementSparseVarSloppy, |
- readFromObjectElementNonSmiVarSloppy, |
- readFromObjectNonIndexVarSloppy |
- ]; |
- |
- let readStrong = [ |
- readFromObjectElementStrong, |
- readFromObjectElementSparseStrong, |
- readFromObjectElementNonSmiStrong, |
- readFromObjectNonIndexStrong, |
- readFromObjectElementLetStrong, |
- readFromObjectElementSparseLetStrong, |
- readFromObjectElementNonSmiLetStrong, |
- readFromObjectNonIndexLetStrong |
- ]; |
- |
- 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)) { |
- let objects = getObjects(); |
- let nonInheritingObjects = getNonInheritingObjects(); |
- for (let object of objects.concat(nonInheritingObjects)) { |
- Object.defineProperty(object, key, desc); |
- for (let func of readStrong) { |
- assertStrongSemantics(func, object); |
- } |
- for (let func of readSloppy) { |
- assertSloppySemantics(func, object); |
- } |
- } |
- for (let object of objects) { |
- // 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); |
- } |
- } |
- } |
- } |
- } |
- } |
-})(); |