| OLD | NEW |
| 1 // Copyright 2006-2009 the V8 project authors. All rights reserved. | 1 // Copyright 2006-2009 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 6032 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6043 return Smi::FromInt(value); | 6043 return Smi::FromInt(value); |
| 6044 } | 6044 } |
| 6045 break; | 6045 break; |
| 6046 } | 6046 } |
| 6047 case EXTERNAL_BYTE_ELEMENTS: { | 6047 case EXTERNAL_BYTE_ELEMENTS: { |
| 6048 ExternalByteArray* array = ExternalByteArray::cast(elements()); | 6048 ExternalByteArray* array = ExternalByteArray::cast(elements()); |
| 6049 if (index < static_cast<uint32_t>(array->length())) { | 6049 if (index < static_cast<uint32_t>(array->length())) { |
| 6050 int8_t value = array->get(index); | 6050 int8_t value = array->get(index); |
| 6051 return Smi::FromInt(value); | 6051 return Smi::FromInt(value); |
| 6052 } | 6052 } |
| 6053 return Top::Throw(*Factory::NewIndexError(index)); | 6053 break; |
| 6054 } | 6054 } |
| 6055 case EXTERNAL_UNSIGNED_BYTE_ELEMENTS: { | 6055 case EXTERNAL_UNSIGNED_BYTE_ELEMENTS: { |
| 6056 ExternalUnsignedByteArray* array = | 6056 ExternalUnsignedByteArray* array = |
| 6057 ExternalUnsignedByteArray::cast(elements()); | 6057 ExternalUnsignedByteArray::cast(elements()); |
| 6058 if (index < static_cast<uint32_t>(array->length())) { | 6058 if (index < static_cast<uint32_t>(array->length())) { |
| 6059 uint8_t value = array->get(index); | 6059 uint8_t value = array->get(index); |
| 6060 return Smi::FromInt(value); | 6060 return Smi::FromInt(value); |
| 6061 } | 6061 } |
| 6062 return Top::Throw(*Factory::NewIndexError(index)); | 6062 break; |
| 6063 } | 6063 } |
| 6064 case EXTERNAL_SHORT_ELEMENTS: { | 6064 case EXTERNAL_SHORT_ELEMENTS: { |
| 6065 ExternalShortArray* array = ExternalShortArray::cast(elements()); | 6065 ExternalShortArray* array = ExternalShortArray::cast(elements()); |
| 6066 if (index < static_cast<uint32_t>(array->length())) { | 6066 if (index < static_cast<uint32_t>(array->length())) { |
| 6067 int16_t value = array->get(index); | 6067 int16_t value = array->get(index); |
| 6068 return Smi::FromInt(value); | 6068 return Smi::FromInt(value); |
| 6069 } | 6069 } |
| 6070 return Top::Throw(*Factory::NewIndexError(index)); | 6070 break; |
| 6071 } | 6071 } |
| 6072 case EXTERNAL_UNSIGNED_SHORT_ELEMENTS: { | 6072 case EXTERNAL_UNSIGNED_SHORT_ELEMENTS: { |
| 6073 ExternalUnsignedShortArray* array = | 6073 ExternalUnsignedShortArray* array = |
| 6074 ExternalUnsignedShortArray::cast(elements()); | 6074 ExternalUnsignedShortArray::cast(elements()); |
| 6075 if (index < static_cast<uint32_t>(array->length())) { | 6075 if (index < static_cast<uint32_t>(array->length())) { |
| 6076 uint16_t value = array->get(index); | 6076 uint16_t value = array->get(index); |
| 6077 return Smi::FromInt(value); | 6077 return Smi::FromInt(value); |
| 6078 } | 6078 } |
| 6079 return Top::Throw(*Factory::NewIndexError(index)); | 6079 break; |
| 6080 } | 6080 } |
| 6081 case EXTERNAL_INT_ELEMENTS: { | 6081 case EXTERNAL_INT_ELEMENTS: { |
| 6082 ExternalIntArray* array = ExternalIntArray::cast(elements()); | 6082 ExternalIntArray* array = ExternalIntArray::cast(elements()); |
| 6083 if (index < static_cast<uint32_t>(array->length())) { | 6083 if (index < static_cast<uint32_t>(array->length())) { |
| 6084 int32_t value = array->get(index); | 6084 int32_t value = array->get(index); |
| 6085 return Heap::NumberFromInt32(value); | 6085 return Heap::NumberFromInt32(value); |
| 6086 } | 6086 } |
| 6087 return Top::Throw(*Factory::NewIndexError(index)); | 6087 break; |
| 6088 } | 6088 } |
| 6089 case EXTERNAL_UNSIGNED_INT_ELEMENTS: { | 6089 case EXTERNAL_UNSIGNED_INT_ELEMENTS: { |
| 6090 ExternalUnsignedIntArray* array = | 6090 ExternalUnsignedIntArray* array = |
| 6091 ExternalUnsignedIntArray::cast(elements()); | 6091 ExternalUnsignedIntArray::cast(elements()); |
| 6092 if (index < static_cast<uint32_t>(array->length())) { | 6092 if (index < static_cast<uint32_t>(array->length())) { |
| 6093 uint32_t value = array->get(index); | 6093 uint32_t value = array->get(index); |
| 6094 return Heap::NumberFromUint32(value); | 6094 return Heap::NumberFromUint32(value); |
| 6095 } | 6095 } |
| 6096 return Top::Throw(*Factory::NewIndexError(index)); | 6096 break; |
| 6097 } | 6097 } |
| 6098 case EXTERNAL_FLOAT_ELEMENTS: { | 6098 case EXTERNAL_FLOAT_ELEMENTS: { |
| 6099 ExternalFloatArray* array = ExternalFloatArray::cast(elements()); | 6099 ExternalFloatArray* array = ExternalFloatArray::cast(elements()); |
| 6100 if (index < static_cast<uint32_t>(array->length())) { | 6100 if (index < static_cast<uint32_t>(array->length())) { |
| 6101 float value = array->get(index); | 6101 float value = array->get(index); |
| 6102 return Heap::AllocateHeapNumber(value); | 6102 return Heap::AllocateHeapNumber(value); |
| 6103 } | 6103 } |
| 6104 return Top::Throw(*Factory::NewIndexError(index)); | 6104 break; |
| 6105 } | 6105 } |
| 6106 case DICTIONARY_ELEMENTS: { | 6106 case DICTIONARY_ELEMENTS: { |
| 6107 NumberDictionary* dictionary = element_dictionary(); | 6107 NumberDictionary* dictionary = element_dictionary(); |
| 6108 int entry = dictionary->FindEntry(index); | 6108 int entry = dictionary->FindEntry(index); |
| 6109 if (entry != NumberDictionary::kNotFound) { | 6109 if (entry != NumberDictionary::kNotFound) { |
| 6110 Object* element = dictionary->ValueAt(entry); | 6110 Object* element = dictionary->ValueAt(entry); |
| 6111 PropertyDetails details = dictionary->DetailsAt(entry); | 6111 PropertyDetails details = dictionary->DetailsAt(entry); |
| 6112 if (details.type() == CALLBACKS) { | 6112 if (details.type() == CALLBACKS) { |
| 6113 // Only accessors allowed as elements. | 6113 // Only accessors allowed as elements. |
| 6114 FixedArray* structure = FixedArray::cast(element); | 6114 FixedArray* structure = FixedArray::cast(element); |
| (...skipping 1198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7313 cast_value = static_cast<ValueType>(int_value); | 7313 cast_value = static_cast<ValueType>(int_value); |
| 7314 } else if (value->IsHeapNumber()) { | 7314 } else if (value->IsHeapNumber()) { |
| 7315 double double_value = HeapNumber::cast(value)->value(); | 7315 double double_value = HeapNumber::cast(value)->value(); |
| 7316 cast_value = static_cast<ValueType>(DoubleToInt32(double_value)); | 7316 cast_value = static_cast<ValueType>(DoubleToInt32(double_value)); |
| 7317 } else { | 7317 } else { |
| 7318 // Clamp undefined to zero (default). All other types have been | 7318 // Clamp undefined to zero (default). All other types have been |
| 7319 // converted to a number type further up in the call chain. | 7319 // converted to a number type further up in the call chain. |
| 7320 ASSERT(value->IsUndefined()); | 7320 ASSERT(value->IsUndefined()); |
| 7321 } | 7321 } |
| 7322 receiver->set(index, cast_value); | 7322 receiver->set(index, cast_value); |
| 7323 } else { | |
| 7324 return Top::Throw(*Factory::NewIndexError(index)); | |
| 7325 } | 7323 } |
| 7326 return Heap::NumberFromInt32(cast_value); | 7324 return Heap::NumberFromInt32(cast_value); |
| 7327 } | 7325 } |
| 7328 | 7326 |
| 7329 | 7327 |
| 7330 Object* ExternalByteArray::SetValue(uint32_t index, Object* value) { | 7328 Object* ExternalByteArray::SetValue(uint32_t index, Object* value) { |
| 7331 return ExternalArrayIntSetter<ExternalByteArray, int8_t> | 7329 return ExternalArrayIntSetter<ExternalByteArray, int8_t> |
| 7332 (this, index, value); | 7330 (this, index, value); |
| 7333 } | 7331 } |
| 7334 | 7332 |
| (...skipping 30 matching lines...) Expand all Loading... |
| 7365 cast_value = static_cast<uint32_t>(int_value); | 7363 cast_value = static_cast<uint32_t>(int_value); |
| 7366 } else if (value->IsHeapNumber()) { | 7364 } else if (value->IsHeapNumber()) { |
| 7367 double double_value = HeapNumber::cast(value)->value(); | 7365 double double_value = HeapNumber::cast(value)->value(); |
| 7368 cast_value = static_cast<uint32_t>(DoubleToUint32(double_value)); | 7366 cast_value = static_cast<uint32_t>(DoubleToUint32(double_value)); |
| 7369 } else { | 7367 } else { |
| 7370 // Clamp undefined to zero (default). All other types have been | 7368 // Clamp undefined to zero (default). All other types have been |
| 7371 // converted to a number type further up in the call chain. | 7369 // converted to a number type further up in the call chain. |
| 7372 ASSERT(value->IsUndefined()); | 7370 ASSERT(value->IsUndefined()); |
| 7373 } | 7371 } |
| 7374 set(index, cast_value); | 7372 set(index, cast_value); |
| 7375 } else { | |
| 7376 return Top::Throw(*Factory::NewIndexError(index)); | |
| 7377 } | 7373 } |
| 7378 return Heap::NumberFromUint32(cast_value); | 7374 return Heap::NumberFromUint32(cast_value); |
| 7379 } | 7375 } |
| 7380 | 7376 |
| 7381 | 7377 |
| 7382 Object* ExternalFloatArray::SetValue(uint32_t index, Object* value) { | 7378 Object* ExternalFloatArray::SetValue(uint32_t index, Object* value) { |
| 7383 float cast_value = 0; | 7379 float cast_value = 0; |
| 7384 if (index < static_cast<uint32_t>(length())) { | 7380 if (index < static_cast<uint32_t>(length())) { |
| 7385 if (value->IsSmi()) { | 7381 if (value->IsSmi()) { |
| 7386 int int_value = Smi::cast(value)->value(); | 7382 int int_value = Smi::cast(value)->value(); |
| 7387 cast_value = static_cast<float>(int_value); | 7383 cast_value = static_cast<float>(int_value); |
| 7388 } else if (value->IsHeapNumber()) { | 7384 } else if (value->IsHeapNumber()) { |
| 7389 double double_value = HeapNumber::cast(value)->value(); | 7385 double double_value = HeapNumber::cast(value)->value(); |
| 7390 cast_value = static_cast<float>(double_value); | 7386 cast_value = static_cast<float>(double_value); |
| 7391 } else { | 7387 } else { |
| 7392 // Clamp undefined to zero (default). All other types have been | 7388 // Clamp undefined to zero (default). All other types have been |
| 7393 // converted to a number type further up in the call chain. | 7389 // converted to a number type further up in the call chain. |
| 7394 ASSERT(value->IsUndefined()); | 7390 ASSERT(value->IsUndefined()); |
| 7395 } | 7391 } |
| 7396 set(index, cast_value); | 7392 set(index, cast_value); |
| 7397 } else { | |
| 7398 return Top::Throw(*Factory::NewIndexError(index)); | |
| 7399 } | 7393 } |
| 7400 return Heap::AllocateHeapNumber(cast_value); | 7394 return Heap::AllocateHeapNumber(cast_value); |
| 7401 } | 7395 } |
| 7402 | 7396 |
| 7403 | 7397 |
| 7404 Object* GlobalObject::GetPropertyCell(LookupResult* result) { | 7398 Object* GlobalObject::GetPropertyCell(LookupResult* result) { |
| 7405 ASSERT(!HasFastProperties()); | 7399 ASSERT(!HasFastProperties()); |
| 7406 Object* value = property_dictionary()->ValueAt(result->GetDictionaryEntry()); | 7400 Object* value = property_dictionary()->ValueAt(result->GetDictionaryEntry()); |
| 7407 ASSERT(value->IsJSGlobalPropertyCell()); | 7401 ASSERT(value->IsJSGlobalPropertyCell()); |
| 7408 return value; | 7402 return value; |
| (...skipping 903 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8312 if (break_point_objects()->IsUndefined()) return 0; | 8306 if (break_point_objects()->IsUndefined()) return 0; |
| 8313 // Single beak point. | 8307 // Single beak point. |
| 8314 if (!break_point_objects()->IsFixedArray()) return 1; | 8308 if (!break_point_objects()->IsFixedArray()) return 1; |
| 8315 // Multiple break points. | 8309 // Multiple break points. |
| 8316 return FixedArray::cast(break_point_objects())->length(); | 8310 return FixedArray::cast(break_point_objects())->length(); |
| 8317 } | 8311 } |
| 8318 #endif | 8312 #endif |
| 8319 | 8313 |
| 8320 | 8314 |
| 8321 } } // namespace v8::internal | 8315 } } // namespace v8::internal |
| OLD | NEW |