Revision: 3117
Author: [email protected]
Date: Fri Oct 23 02:19:17 2009
Log: Stop throwing exceptions for out-of-range accesses to CanvasArrays.
This is per resolution in the WebGL working group to make these types
match the WebIDL IndexSetter and IndexGetter semantics, which are
still being defined but will very likely not throw.

Review URL: http://codereview.chromium.org/328007
http://code.google.com/p/v8/source/detail?r=3117

Modified:
  /branches/bleeding_edge/src/factory.cc
  /branches/bleeding_edge/src/factory.h
  /branches/bleeding_edge/src/messages.js
  /branches/bleeding_edge/src/objects.cc
  /branches/bleeding_edge/test/cctest/test-api.cc

=======================================
--- /branches/bleeding_edge/src/factory.cc      Tue Oct 20 08:26:17 2009
+++ /branches/bleeding_edge/src/factory.cc      Fri Oct 23 02:19:17 2009
@@ -361,14 +361,6 @@
  Handle<Object> Factory::NewRangeError(Handle<String> message) {
    return NewError("$RangeError", message);
  }
-
-
-Handle<Object> Factory::NewIndexError(uint32_t index) {
-  Handle<Object> indexHandle =  
Handle<Object>(Heap::NumberFromUint32(index));
-  return NewRangeError("invalid_array_index",
-                       HandleVector<Object>(&indexHandle,
-                                            1));
-}


  Handle<Object> Factory::NewSyntaxError(const char* type, Handle<JSArray>  
args) {
=======================================
--- /branches/bleeding_edge/src/factory.h       Tue Oct 20 08:26:17 2009
+++ /branches/bleeding_edge/src/factory.h       Fri Oct 23 02:19:17 2009
@@ -252,8 +252,6 @@
                                        Vector< Handle<Object> > args);
    static Handle<Object> NewRangeError(Handle<String> message);

-  static Handle<Object> NewIndexError(uint32_t index);
-
    static Handle<Object> NewSyntaxError(const char* type, Handle<JSArray>  
args);
    static Handle<Object> NewSyntaxError(Handle<String> message);

=======================================
--- /branches/bleeding_edge/src/messages.js     Tue Oct 20 08:26:17 2009
+++ /branches/bleeding_edge/src/messages.js     Fri Oct 23 02:19:17 2009
@@ -159,7 +159,6 @@
        reduce_no_initial:            "Reduce of empty array with no initial  
value",
        // RangeError
        invalid_array_length:         "Invalid array length",
-      invalid_array_index:          "Invalid array index %0",  //  
Currently for CanvasArray types only
        stack_overflow:               "Maximum call stack size exceeded",
        apply_overflow:               "Function.prototype.apply cannot  
support %0 arguments",
        // SyntaxError
=======================================
--- /branches/bleeding_edge/src/objects.cc      Thu Oct 22 07:49:00 2009
+++ /branches/bleeding_edge/src/objects.cc      Fri Oct 23 02:19:17 2009
@@ -6050,7 +6050,7 @@
          int8_t value = array->get(index);
          return Smi::FromInt(value);
        }
-      return Top::Throw(*Factory::NewIndexError(index));
+      break;
      }
      case EXTERNAL_UNSIGNED_BYTE_ELEMENTS: {
        ExternalUnsignedByteArray* array =
@@ -6059,7 +6059,7 @@
          uint8_t value = array->get(index);
          return Smi::FromInt(value);
        }
-      return Top::Throw(*Factory::NewIndexError(index));
+      break;
      }
      case EXTERNAL_SHORT_ELEMENTS: {
        ExternalShortArray* array = ExternalShortArray::cast(elements());
@@ -6067,7 +6067,7 @@
          int16_t value = array->get(index);
          return Smi::FromInt(value);
        }
-      return Top::Throw(*Factory::NewIndexError(index));
+      break;
      }
      case EXTERNAL_UNSIGNED_SHORT_ELEMENTS: {
        ExternalUnsignedShortArray* array =
@@ -6076,7 +6076,7 @@
          uint16_t value = array->get(index);
          return Smi::FromInt(value);
        }
-      return Top::Throw(*Factory::NewIndexError(index));
+      break;
      }
      case EXTERNAL_INT_ELEMENTS: {
        ExternalIntArray* array = ExternalIntArray::cast(elements());
@@ -6084,7 +6084,7 @@
          int32_t value = array->get(index);
          return Heap::NumberFromInt32(value);
        }
-      return Top::Throw(*Factory::NewIndexError(index));
+      break;
      }
      case EXTERNAL_UNSIGNED_INT_ELEMENTS: {
        ExternalUnsignedIntArray* array =
@@ -6093,7 +6093,7 @@
          uint32_t value = array->get(index);
          return Heap::NumberFromUint32(value);
        }
-      return Top::Throw(*Factory::NewIndexError(index));
+      break;
      }
      case EXTERNAL_FLOAT_ELEMENTS: {
        ExternalFloatArray* array = ExternalFloatArray::cast(elements());
@@ -6101,7 +6101,7 @@
          float value = array->get(index);
          return Heap::AllocateHeapNumber(value);
        }
-      return Top::Throw(*Factory::NewIndexError(index));
+      break;
      }
      case DICTIONARY_ELEMENTS: {
        NumberDictionary* dictionary = element_dictionary();
@@ -7320,8 +7320,6 @@
        ASSERT(value->IsUndefined());
      }
      receiver->set(index, cast_value);
-  } else {
-    return Top::Throw(*Factory::NewIndexError(index));
    }
    return Heap::NumberFromInt32(cast_value);
  }
@@ -7372,8 +7370,6 @@
        ASSERT(value->IsUndefined());
      }
      set(index, cast_value);
-  } else {
-    return Top::Throw(*Factory::NewIndexError(index));
    }
    return Heap::NumberFromUint32(cast_value);
  }
@@ -7394,8 +7390,6 @@
        ASSERT(value->IsUndefined());
      }
      set(index, cast_value);
-  } else {
-    return Top::Throw(*Factory::NewIndexError(index));
    }
    return Heap::AllocateHeapNumber(cast_value);
  }
=======================================
--- /branches/bleeding_edge/test/cctest/test-api.cc     Thu Oct 22 07:49:00 2009
+++ /branches/bleeding_edge/test/cctest/test-api.cc     Fri Oct 23 02:19:17 2009
@@ -8196,7 +8196,7 @@
    i::Heap::CollectAllGarbage(false);  // Force GC to trigger verification.
    CHECK_EQ(28, result->Int32Value());

-  // Check out-of-range loads.
+  // Make sure out-of-range loads do not throw.
    i::OS::SNPrintF(test_buf,
                    "var caught_exception = false;"
                    "try {"
@@ -8207,9 +8207,9 @@
                    "caught_exception;",
                    kElementCount);
    result = CompileRun(test_buf.start());
-  CHECK_EQ(true, result->BooleanValue());
-
-  // Check out-of-range stores.
+  CHECK_EQ(false, result->BooleanValue());
+
+  // Make sure out-of-range stores do not throw.
    i::OS::SNPrintF(test_buf,
                    "var caught_exception = false;"
                    "try {"
@@ -8220,7 +8220,7 @@
                    "caught_exception;",
                    kElementCount);
    result = CompileRun(test_buf.start());
-  CHECK_EQ(true, result->BooleanValue());
+  CHECK_EQ(false, result->BooleanValue());

    // Check other boundary conditions, values and operations.
    result = CompileRun("for (var i = 0; i < 8; i++) {"

--~--~---------~--~----~------------~-------~--~----~
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
-~----------~----~----~----~------~----~------~--~---

Reply via email to