| Index: src/runtime.cc
|
| ===================================================================
|
| --- src/runtime.cc (revision 4722)
|
| +++ src/runtime.cc (working copy)
|
| @@ -291,7 +291,7 @@
|
| Handle<String> name(String::cast(*key));
|
| ASSERT(!name->AsArrayIndex(&element_index));
|
| result = SetProperty(boilerplate, name, value, NONE);
|
| - } else if (key->ToArrayIndex(&element_index)) {
|
| + } else if (Array::IndexFromObject(*key, &element_index)) {
|
| // Array index (uint32).
|
| result = SetElement(boilerplate, element_index, value);
|
| } else {
|
| @@ -1583,7 +1583,7 @@
|
|
|
| static Object* CharCodeAt(String* subject, Object* index) {
|
| uint32_t i = 0;
|
| - if (!index->ToArrayIndex(&i)) return Heap::nan_value();
|
| + if (!Array::IndexFromObject(index, &i)) return Heap::nan_value();
|
| // Flatten the string. If someone wants to get a char at an index
|
| // in a cons string, it is likely that more indices will be
|
| // accessed.
|
| @@ -1599,7 +1599,7 @@
|
|
|
| static Object* CharFromCode(Object* char_code) {
|
| uint32_t code;
|
| - if (char_code->ToArrayIndex(&code)) {
|
| + if (Array::IndexFromObject(char_code, &code)) {
|
| if (code <= 0xffff) {
|
| return Heap::LookupSingleCharacterStringFromCode(code);
|
| }
|
| @@ -2780,7 +2780,7 @@
|
|
|
| Object* index = args[2];
|
| uint32_t start_index;
|
| - if (!index->ToArrayIndex(&start_index)) return Smi::FromInt(-1);
|
| + if (!Array::IndexFromObject(index, &start_index)) return Smi::FromInt(-1);
|
|
|
| RUNTIME_ASSERT(start_index <= static_cast<uint32_t>(sub->length()));
|
| int position = Runtime::StringMatch(sub, pat, start_index);
|
| @@ -2830,7 +2830,7 @@
|
|
|
| Object* index = args[2];
|
| uint32_t start_index;
|
| - if (!index->ToArrayIndex(&start_index)) return Smi::FromInt(-1);
|
| + if (!Array::IndexFromObject(index, &start_index)) return Smi::FromInt(-1);
|
|
|
| uint32_t pat_length = pat->length();
|
| uint32_t sub_length = sub->length();
|
| @@ -3657,7 +3657,7 @@
|
|
|
| // Check if the given key is an array index.
|
| uint32_t index;
|
| - if (key->ToArrayIndex(&index)) {
|
| + if (Array::IndexFromObject(*key, &index)) {
|
| return GetElementOrCharAt(object, index);
|
| }
|
|
|
| @@ -3843,7 +3843,7 @@
|
|
|
| // Check if the given key is an array index.
|
| uint32_t index;
|
| - if (key->ToArrayIndex(&index)) {
|
| + if (Array::IndexFromObject(*key, &index)) {
|
| // In Firefox/SpiderMonkey, Safari and Opera you can access the characters
|
| // of a string using [] notation. We need to support this too in
|
| // JavaScript.
|
| @@ -3895,7 +3895,7 @@
|
|
|
| // Check if the given key is an array index.
|
| uint32_t index;
|
| - if (key->ToArrayIndex(&index)) {
|
| + if (Array::IndexFromObject(*key, &index)) {
|
| // In Firefox/SpiderMonkey, Safari and Opera you can access the characters
|
| // of a string using [] notation. We need to support this too in
|
| // JavaScript.
|
| @@ -3942,7 +3942,7 @@
|
|
|
| // Check if the given key is an array index.
|
| uint32_t index;
|
| - if (key->ToArrayIndex(&index)) {
|
| + if (Array::IndexFromObject(*key, &index)) {
|
| // In Firefox/SpiderMonkey, Safari and Opera you can access the
|
| // characters of a string using [] notation. In the case of a
|
| // String object we just need to redirect the deletion to the
|
| @@ -4355,7 +4355,7 @@
|
| // Try to convert the key to an index. If successful and within
|
| // index return the the argument from the frame.
|
| uint32_t index;
|
| - if (args[0]->ToArrayIndex(&index) && index < n) {
|
| + if (Array::IndexFromObject(args[0], &index) && index < n) {
|
| return frame->GetParameter(index);
|
| }
|
|
|
| @@ -6457,8 +6457,8 @@
|
| if (obj->IsFailure()) return obj;
|
|
|
| AssertNoAllocation no_gc;
|
| - FixedArray* array = reinterpret_cast<FixedArray*>(obj);
|
| - array->set_map(Heap::fixed_array_map());
|
| + reinterpret_cast<Array*>(obj)->set_map(Heap::fixed_array_map());
|
| + FixedArray* array = FixedArray::cast(obj);
|
| array->set_length(length);
|
|
|
| WriteBarrierMode mode = array->GetWriteBarrierMode(no_gc);
|
| @@ -7747,8 +7747,8 @@
|
| Handle<Object> key2 = args.at<Object>(2);
|
|
|
| uint32_t index1, index2;
|
| - if (!key1->ToArrayIndex(&index1)
|
| - || !key2->ToArrayIndex(&index2)) {
|
| + if (!Array::IndexFromObject(*key1, &index1)
|
| + || !Array::IndexFromObject(*key2, &index2)) {
|
| return Top::ThrowIllegalOperation();
|
| }
|
|
|
| @@ -7779,19 +7779,17 @@
|
| for (int i = 0; i < keys_length; i++) {
|
| Object* key = keys->get(i);
|
| uint32_t index;
|
| - if (!key->ToArrayIndex(&index) || index >= length) {
|
| + if (!Array::IndexFromObject(key, &index) || index >= length) {
|
| // Zap invalid keys.
|
| keys->set_undefined(i);
|
| }
|
| }
|
| return *Factory::NewJSArrayWithElements(keys);
|
| } else {
|
| - ASSERT(array->HasFastElements());
|
| Handle<FixedArray> single_interval = Factory::NewFixedArray(2);
|
| // -1 means start of array.
|
| single_interval->set(0, Smi::FromInt(-1));
|
| - uint32_t actual_length =
|
| - static_cast<uint32_t>(FixedArray::cast(array->elements())->length());
|
| + uint32_t actual_length = static_cast<uint32_t>(array->elements()->length());
|
| uint32_t min_length = actual_length < length ? actual_length : length;
|
| Handle<Object> length_object =
|
| Factory::NewNumber(static_cast<double>(min_length));
|
|
|