Chromium Code Reviews

Side by Side Diff: src/elements.cc

Issue 7901016: Basic support for tracking smi-only arrays on ia32. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: deactivate by default Created 9 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | | Annotate | Revision Log
OLDNEW
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 209 matching lines...)
220 private: 220 private:
221 DISALLOW_COPY_AND_ASSIGN(ElementsAccessorBase); 221 DISALLOW_COPY_AND_ASSIGN(ElementsAccessorBase);
222 }; 222 };
223 223
224 224
225 class FastElementsAccessor 225 class FastElementsAccessor
226 : public ElementsAccessorBase<FastElementsAccessor, FixedArray> { 226 : public ElementsAccessorBase<FastElementsAccessor, FixedArray> {
227 public: 227 public:
228 static MaybeObject* DeleteCommon(JSObject* obj, 228 static MaybeObject* DeleteCommon(JSObject* obj,
229 uint32_t key) { 229 uint32_t key) {
230 ASSERT(obj->HasFastElements() || obj->HasFastArgumentsElements()); 230 ASSERT(obj->HasFastElements() ||
231 obj->HasFastSmiOnlyElements() ||
232 obj->HasFastArgumentsElements());
231 Heap* heap = obj->GetHeap(); 233 Heap* heap = obj->GetHeap();
232 FixedArray* backing_store = FixedArray::cast(obj->elements()); 234 FixedArray* backing_store = FixedArray::cast(obj->elements());
233 if (backing_store->map() == heap->non_strict_arguments_elements_map()) { 235 if (backing_store->map() == heap->non_strict_arguments_elements_map()) {
234 backing_store = FixedArray::cast(backing_store->get(1)); 236 backing_store = FixedArray::cast(backing_store->get(1));
235 } else { 237 } else {
236 Object* writable; 238 Object* writable;
237 MaybeObject* maybe = obj->EnsureWritableFastElements(); 239 MaybeObject* maybe = obj->EnsureWritableFastElements();
238 if (!maybe->ToObject(&writable)) return maybe; 240 if (!maybe->ToObject(&writable)) return maybe;
239 backing_store = FixedArray::cast(writable); 241 backing_store = FixedArray::cast(writable);
240 } 242 }
(...skipping 364 matching lines...)
605 ExternalShortElementsAccessor short_elements_handler; 607 ExternalShortElementsAccessor short_elements_handler;
606 ExternalUnsignedShortElementsAccessor unsigned_short_elements_handler; 608 ExternalUnsignedShortElementsAccessor unsigned_short_elements_handler;
607 ExternalIntElementsAccessor int_elements_handler; 609 ExternalIntElementsAccessor int_elements_handler;
608 ExternalUnsignedIntElementsAccessor unsigned_int_elements_handler; 610 ExternalUnsignedIntElementsAccessor unsigned_int_elements_handler;
609 ExternalFloatElementsAccessor float_elements_handler; 611 ExternalFloatElementsAccessor float_elements_handler;
610 ExternalDoubleElementsAccessor double_elements_handler; 612 ExternalDoubleElementsAccessor double_elements_handler;
611 PixelElementsAccessor pixel_elements_handler; 613 PixelElementsAccessor pixel_elements_handler;
612 } element_accessors; 614 } element_accessors;
613 615
614 static ElementsAccessor* accessor_array[] = { 616 static ElementsAccessor* accessor_array[] = {
615 &element_accessors.fast_elements_handler, 617 &element_accessors.fast_elements_handler,
Jakob Kummerow 2011/09/16 16:30:34 Please add a comment here that the duplicate line
danno 2011/09/21 14:32:04 Done.
618 &element_accessors.fast_elements_handler,
616 &element_accessors.fast_double_elements_handler, 619 &element_accessors.fast_double_elements_handler,
617 &element_accessors.dictionary_elements_handler, 620 &element_accessors.dictionary_elements_handler,
618 &element_accessors.non_strict_arguments_elements_handler, 621 &element_accessors.non_strict_arguments_elements_handler,
619 &element_accessors.byte_elements_handler, 622 &element_accessors.byte_elements_handler,
620 &element_accessors.unsigned_byte_elements_handler, 623 &element_accessors.unsigned_byte_elements_handler,
621 &element_accessors.short_elements_handler, 624 &element_accessors.short_elements_handler,
622 &element_accessors.unsigned_short_elements_handler, 625 &element_accessors.unsigned_short_elements_handler,
623 &element_accessors.int_elements_handler, 626 &element_accessors.int_elements_handler,
624 &element_accessors.unsigned_int_elements_handler, 627 &element_accessors.unsigned_int_elements_handler,
625 &element_accessors.float_elements_handler, 628 &element_accessors.float_elements_handler,
626 &element_accessors.double_elements_handler, 629 &element_accessors.double_elements_handler,
627 &element_accessors.pixel_elements_handler 630 &element_accessors.pixel_elements_handler
628 }; 631 };
629 632
633 STATIC_ASSERT((sizeof(accessor_array) / sizeof(*accessor_array)) ==
634 kElementsKindCount);
635
630 elements_accessors_ = accessor_array; 636 elements_accessors_ = accessor_array;
631 } 637 }
632 638
633 639
634 } } // namespace v8::internal 640 } } // namespace v8::internal
OLDNEW

Powered by Google App Engine