| OLD | NEW |
| 1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 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 374 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 385 | 385 |
| 386 | 386 |
| 387 class PixelElementsAccessor | 387 class PixelElementsAccessor |
| 388 : public ExternalElementsAccessor<PixelElementsAccessor, | 388 : public ExternalElementsAccessor<PixelElementsAccessor, |
| 389 ExternalPixelArray> { | 389 ExternalPixelArray> { |
| 390 }; | 390 }; |
| 391 | 391 |
| 392 | 392 |
| 393 class DictionaryElementsAccessor | 393 class DictionaryElementsAccessor |
| 394 : public ElementsAccessorBase<DictionaryElementsAccessor, | 394 : public ElementsAccessorBase<DictionaryElementsAccessor, |
| 395 NumberDictionary> { | 395 SeededNumberDictionary> { |
| 396 public: | 396 public: |
| 397 static MaybeObject* DeleteCommon(JSObject* obj, | 397 static MaybeObject* DeleteCommon(JSObject* obj, |
| 398 uint32_t key, | 398 uint32_t key, |
| 399 JSReceiver::DeleteMode mode) { | 399 JSReceiver::DeleteMode mode) { |
| 400 Isolate* isolate = obj->GetIsolate(); | 400 Isolate* isolate = obj->GetIsolate(); |
| 401 Heap* heap = isolate->heap(); | 401 Heap* heap = isolate->heap(); |
| 402 FixedArray* backing_store = FixedArray::cast(obj->elements()); | 402 FixedArray* backing_store = FixedArray::cast(obj->elements()); |
| 403 bool is_arguments = | 403 bool is_arguments = |
| 404 (obj->GetElementsKind() == NON_STRICT_ARGUMENTS_ELEMENTS); | 404 (obj->GetElementsKind() == NON_STRICT_ARGUMENTS_ELEMENTS); |
| 405 if (is_arguments) { | 405 if (is_arguments) { |
| 406 backing_store = FixedArray::cast(backing_store->get(1)); | 406 backing_store = FixedArray::cast(backing_store->get(1)); |
| 407 } | 407 } |
| 408 NumberDictionary* dictionary = NumberDictionary::cast(backing_store); | 408 SeededNumberDictionary* dictionary = |
| 409 SeededNumberDictionary::cast(backing_store); |
| 409 int entry = dictionary->FindEntry(key); | 410 int entry = dictionary->FindEntry(key); |
| 410 if (entry != NumberDictionary::kNotFound) { | 411 if (entry != SeededNumberDictionary::kNotFound) { |
| 411 Object* result = dictionary->DeleteProperty(entry, mode); | 412 Object* result = dictionary->DeleteProperty(entry, mode); |
| 412 if (result == heap->true_value()) { | 413 if (result == heap->true_value()) { |
| 413 MaybeObject* maybe_elements = dictionary->Shrink(key); | 414 MaybeObject* maybe_elements = dictionary->Shrink(key); |
| 414 FixedArray* new_elements = NULL; | 415 FixedArray* new_elements = NULL; |
| 415 if (!maybe_elements->To(&new_elements)) { | 416 if (!maybe_elements->To(&new_elements)) { |
| 416 return maybe_elements; | 417 return maybe_elements; |
| 417 } | 418 } |
| 418 if (is_arguments) { | 419 if (is_arguments) { |
| 419 FixedArray::cast(obj->elements())->set(1, new_elements); | 420 FixedArray::cast(obj->elements())->set(1, new_elements); |
| 420 } else { | 421 } else { |
| (...skipping 12 matching lines...) Expand all Loading... |
| 433 isolate->factory()->NewTypeError("strict_delete_property", | 434 isolate->factory()->NewTypeError("strict_delete_property", |
| 434 HandleVector(args, 2)); | 435 HandleVector(args, 2)); |
| 435 return isolate->Throw(*error); | 436 return isolate->Throw(*error); |
| 436 } | 437 } |
| 437 } | 438 } |
| 438 return heap->true_value(); | 439 return heap->true_value(); |
| 439 } | 440 } |
| 440 | 441 |
| 441 protected: | 442 protected: |
| 442 friend class ElementsAccessorBase<DictionaryElementsAccessor, | 443 friend class ElementsAccessorBase<DictionaryElementsAccessor, |
| 443 NumberDictionary>; | 444 SeededNumberDictionary>; |
| 444 | 445 |
| 445 virtual MaybeObject* Delete(JSObject* obj, | 446 virtual MaybeObject* Delete(JSObject* obj, |
| 446 uint32_t key, | 447 uint32_t key, |
| 447 JSReceiver::DeleteMode mode) { | 448 JSReceiver::DeleteMode mode) { |
| 448 return DeleteCommon(obj, key, mode); | 449 return DeleteCommon(obj, key, mode); |
| 449 } | 450 } |
| 450 | 451 |
| 451 static MaybeObject* Get(NumberDictionary* backing_store, | 452 static MaybeObject* Get(SeededNumberDictionary* backing_store, |
| 452 uint32_t key, | 453 uint32_t key, |
| 453 JSObject* obj, | 454 JSObject* obj, |
| 454 Object* receiver) { | 455 Object* receiver) { |
| 455 int entry = backing_store->FindEntry(key); | 456 int entry = backing_store->FindEntry(key); |
| 456 if (entry != NumberDictionary::kNotFound) { | 457 if (entry != SeededNumberDictionary::kNotFound) { |
| 457 Object* element = backing_store->ValueAt(entry); | 458 Object* element = backing_store->ValueAt(entry); |
| 458 PropertyDetails details = backing_store->DetailsAt(entry); | 459 PropertyDetails details = backing_store->DetailsAt(entry); |
| 459 if (details.type() == CALLBACKS) { | 460 if (details.type() == CALLBACKS) { |
| 460 return obj->GetElementWithCallback(receiver, | 461 return obj->GetElementWithCallback(receiver, |
| 461 element, | 462 element, |
| 462 key, | 463 key, |
| 463 obj); | 464 obj); |
| 464 } else { | 465 } else { |
| 465 return element; | 466 return element; |
| 466 } | 467 } |
| 467 } | 468 } |
| 468 return obj->GetHeap()->the_hole_value(); | 469 return obj->GetHeap()->the_hole_value(); |
| 469 } | 470 } |
| 470 | 471 |
| 471 static uint32_t GetKeyForIndex(NumberDictionary* dict, | 472 static uint32_t GetKeyForIndex(SeededNumberDictionary* dict, |
| 472 uint32_t index) { | 473 uint32_t index) { |
| 473 Object* key = dict->KeyAt(index); | 474 Object* key = dict->KeyAt(index); |
| 474 return Smi::cast(key)->value(); | 475 return Smi::cast(key)->value(); |
| 475 } | 476 } |
| 476 }; | 477 }; |
| 477 | 478 |
| 478 | 479 |
| 479 class NonStrictArgumentsElementsAccessor | 480 class NonStrictArgumentsElementsAccessor |
| 480 : public ElementsAccessorBase<NonStrictArgumentsElementsAccessor, | 481 : public ElementsAccessorBase<NonStrictArgumentsElementsAccessor, |
| 481 FixedArray> { | 482 FixedArray> { |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 625 &element_accessors.float_elements_handler, | 626 &element_accessors.float_elements_handler, |
| 626 &element_accessors.double_elements_handler, | 627 &element_accessors.double_elements_handler, |
| 627 &element_accessors.pixel_elements_handler | 628 &element_accessors.pixel_elements_handler |
| 628 }; | 629 }; |
| 629 | 630 |
| 630 elements_accessors_ = accessor_array; | 631 elements_accessors_ = accessor_array; |
| 631 } | 632 } |
| 632 | 633 |
| 633 | 634 |
| 634 } } // namespace v8::internal | 635 } } // namespace v8::internal |
| OLD | NEW |