Revert "Correct semantics for numerically indexed stores to typed arrays."
authordslomov@chromium.org <dslomov@chromium.org>
Fri, 17 Oct 2014 13:01:54 +0000 (13:01 +0000)
committerdslomov@chromium.org <dslomov@chromium.org>
Fri, 17 Oct 2014 13:01:54 +0000 (13:01 +0000)
This reverts commit r24691 because win64 release build breaks.

TBR=verwaest@chromium.org

Review URL: https://codereview.chromium.org/659313002

git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@24695 ce2b1a6d-e550-0410-aec6-3dcde31c8c00

src/lookup.cc
src/lookup.h
src/objects.cc
test/mjsunit/harmony/typedarrays.js

index bca0ab5..b855abe 100644 (file)
@@ -309,24 +309,6 @@ void LookupIterator::WriteDataValue(Handle<Object> value) {
 }
 
 
-bool LookupIterator::IsSpecialNumericIndex() const {
-  if (GetStoreTarget()->IsJSTypedArray() && name()->IsString()) {
-    Handle<String> name_string = Handle<String>::cast(name());
-    if (name_string->length() > 0) {
-      double d =
-          StringToDouble(isolate()->unicode_cache(), *name_string, NO_FLAGS);
-      if (!std::isnan(d)) {
-        Factory* factory = isolate()->factory();
-        Handle<Object> num = factory->NewNumber(d);
-        Handle<String> roundtrip_string = factory->NumberToString(num);
-        if (String::Equals(name_string, roundtrip_string)) return true;
-      }
-    }
-  }
-  return false;
-}
-
-
 void LookupIterator::InternalizeName() {
   if (name_->IsUniqueName()) return;
   name_ = factory()->InternalizeString(Handle<String>::cast(name_));
index 52231e5..14ca010 100644 (file)
@@ -138,10 +138,6 @@ class LookupIterator FINAL BASE_EMBEDDED {
   Handle<Object> GetDataValue() const;
   void WriteDataValue(Handle<Object> value);
 
-  // Checks whether the receiver is an indexed exotic object
-  // and name is a special numeric index.
-  bool IsSpecialNumericIndex() const;
-
   void InternalizeName();
 
  private:
index a697a77..5e9e154 100644 (file)
@@ -2986,10 +2986,6 @@ MaybeHandle<Object> Object::AddDataProperty(LookupIterator* it,
   // instead. If the prototype is Null, the proxy is detached.
   if (receiver->IsJSGlobalProxy()) return value;
 
-  // If the receiver is Indexed Exotic object (currently only typed arrays),
-  // disallow adding properties with numeric names.
-  if (it->IsSpecialNumericIndex()) return value;
-
   // Possibly migrate to the most up-to-date map that will be able to store
   // |value| under it->name() with |attributes|.
   it->PrepareTransitionToDataProperty(value, attributes, store_mode);
index 59d09bb..5b75874 100644 (file)
@@ -481,85 +481,6 @@ function TestTypedArraySet() {
 
 TestTypedArraySet();
 
-function TestTypedArraysWithIllegalIndices() {
-  var a = new Int32Array(100);
-
-  a[-10] = 10;
-  assertEquals(undefined, a[-10]);
-  a["-10"] = 10;
-  assertEquals(undefined, a["-10"]);
-
-  var s = "    -10";
-  a[s] = 10;
-  assertEquals(10, a[s]);
-  var s1 = "    -10   ";
-  a[s] = 10;
-  assertEquals(10, a[s]);
-
-  a["-1e2"] = 10;
-  assertEquals(10, a["-1e2"]);
-  assertEquals(undefined, a[-1e2]);
-
-  a[-Infinity] = 50;
-  assertEquals(undefined, a[-Infinity]);
-  a[1.5] = 10;
-  assertEquals(undefined, a[1.5]);
-  var nan = Math.sqrt(-1);
-  a[nan] = 5;
-  assertEquals(5, a[nan]);
-
-  var x = 0;
-  var y = -0;
-  assertEquals(Infinity, 1/x);
-  assertEquals(-Infinity, 1/y);
-  a[x] = 5;
-  a[y] = 27;
-  assertEquals(27, a[x]);
-  assertEquals(27, a[y]);
-}
-
-TestTypedArraysWithIllegalIndices();
-
-function TestTypedArraysWithIllegalIndicesStrict() {
-  'use strict';
-  var a = new Int32Array(100);
-
-  a[-10] = 10;
-  assertEquals(undefined, a[-10]);
-  a["-10"] = 10;
-  assertEquals(undefined, a["-10"]);
-
-  var s = "    -10";
-  a[s] = 10;
-  assertEquals(10, a[s]);
-  var s1 = "    -10   ";
-  a[s] = 10;
-  assertEquals(10, a[s]);
-
-  a["-1e2"] = 10;
-  assertEquals(10, a["-1e2"]);
-  assertEquals(undefined, a[-1e2]);
-
-  a[-Infinity] = 50;
-  assertEquals(undefined, a[-Infinity]);
-  a[1.5] = 10;
-  assertEquals(undefined, a[1.5]);
-  var nan = Math.sqrt(-1);
-  a[nan] = 5;
-  assertEquals(5, a[nan]);
-
-  var x = 0;
-  var y = -0;
-  assertEquals(Infinity, 1/x);
-  assertEquals(-Infinity, 1/y);
-  a[x] = 5;
-  a[y] = 27;
-  assertEquals(27, a[x]);
-  assertEquals(27, a[y]);
-}
-
-TestTypedArraysWithIllegalIndicesStrict();
-
 // DataView
 function TestDataViewConstructor() {
   var ab = new ArrayBuffer(256);