| Index: test/mjsunit/strong/load-element.js | 
| diff --git a/test/mjsunit/strong/load-element.js b/test/mjsunit/strong/load-element.js | 
| deleted file mode 100644 | 
| index 4007b7db6163325b53dc5472ceb0f3d03f16b7cd..0000000000000000000000000000000000000000 | 
| --- a/test/mjsunit/strong/load-element.js | 
| +++ /dev/null | 
| @@ -1,267 +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(""), | 
| -    [], | 
| -    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 literals = [0, NaN, true, ""]; | 
| - | 
| -  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 }); | 
| -  } | 
| - | 
| -  let dummyAccessorProto = {}; | 
| -  for (let key of goodKeys) { | 
| -    Object.defineProperty(dummyAccessorProto, key, { set: (function(){}) }) | 
| -  } | 
| - | 
| -  // String literals/objects should not throw on character index access | 
| -  assertDoesNotThrow(function() {"use strong"; return "string"[0]; }); | 
| -  assertDoesNotThrow(function() {"use strong"; return Object("string")[0]; }); | 
| - | 
| -  // Attempting to access a property on an object with no defined properties | 
| -  // should throw. | 
| -  for (let object of getObjects().concat(getNonInheritingObjects(), literals)) { | 
| -    for (let func of readStrong) { | 
| -      assertStrongSemantics(func, object); | 
| -    } | 
| -    for (let func of readSloppy) { | 
| -      assertSloppySemantics(func, object); | 
| -    } | 
| -  } | 
| -  for (let object of getObjects()) { | 
| -    // 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); | 
| -      } | 
| -    } | 
| -  } | 
| -  // Properties with accessor descriptors missing 'get' should throw on access. | 
| -  for (let desc of badAccessorDescs) { | 
| -    for (let key of goodKeys) { | 
| -      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); | 
| -        } | 
| -      } | 
| -    } | 
| -  } | 
| -  // The same behaviour should be expected for bad accessor properties on the | 
| -  // prototype chain. | 
| -  for (let object of getObjects()) { | 
| -    object.__proto__ = dummyAccessorProto; | 
| -    for (let func of readStrong) { | 
| -      assertStrongSemantics(func, object); | 
| -    } | 
| -    for (let func of readSloppy) { | 
| -      assertSloppySemantics(func, object); | 
| -    } | 
| -  } | 
| -  assertThrows(function(){"use strong"; typeof ({})[1];}, TypeError); | 
| -  assertThrows( | 
| -    function(){"use strong"; typeof ({})[1] === "undefined"}, TypeError); | 
| -})(); | 
|  |