Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(126)

Side by Side Diff: src/heap.h

Issue 259173003: Kiss goodbye to MaybeObject. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: rebase + addressed comments Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/handles-inl.h ('k') | src/heap.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef V8_HEAP_H_ 5 #ifndef V8_HEAP_H_
6 #define V8_HEAP_H_ 6 #define V8_HEAP_H_
7 7
8 #include <cmath> 8 #include <cmath>
9 9
10 #include "allocation.h" 10 #include "allocation.h"
(...skipping 666 matching lines...) Expand 10 before | Expand all | Expand 10 after
677 677
678 Address* OldDataSpaceAllocationTopAddress() { 678 Address* OldDataSpaceAllocationTopAddress() {
679 return old_data_space_->allocation_top_address(); 679 return old_data_space_->allocation_top_address();
680 } 680 }
681 Address* OldDataSpaceAllocationLimitAddress() { 681 Address* OldDataSpaceAllocationLimitAddress() {
682 return old_data_space_->allocation_limit_address(); 682 return old_data_space_->allocation_limit_address();
683 } 683 }
684 684
685 // Returns a deep copy of the JavaScript object. 685 // Returns a deep copy of the JavaScript object.
686 // Properties and elements are copied too. 686 // Properties and elements are copied too.
687 // Returns failure if allocation failed.
688 // Optionally takes an AllocationSite to be appended in an AllocationMemento. 687 // Optionally takes an AllocationSite to be appended in an AllocationMemento.
689 MUST_USE_RESULT MaybeObject* CopyJSObject(JSObject* source, 688 MUST_USE_RESULT AllocationResult CopyJSObject(JSObject* source,
690 AllocationSite* site = NULL); 689 AllocationSite* site = NULL);
691 690
692 // Clear the Instanceof cache (used when a prototype changes). 691 // Clear the Instanceof cache (used when a prototype changes).
693 inline void ClearInstanceofCache(); 692 inline void ClearInstanceofCache();
694 693
695 // Iterates the whole code space to clear all ICs of the given kind. 694 // Iterates the whole code space to clear all ICs of the given kind.
696 void ClearAllICsByKind(Code::Kind kind); 695 void ClearAllICsByKind(Code::Kind kind);
697 696
698 // For use during bootup. 697 // For use during bootup.
699 void RepairFreeListsAfterBoot(); 698 void RepairFreeListsAfterBoot();
700 699
701 template<typename T> 700 template<typename T>
702 static inline bool IsOneByte(T t, int chars); 701 static inline bool IsOneByte(T t, int chars);
703 702
704 // Move len elements within a given array from src_index index to dst_index 703 // Move len elements within a given array from src_index index to dst_index
705 // index. 704 // index.
706 void MoveElements(FixedArray* array, int dst_index, int src_index, int len); 705 void MoveElements(FixedArray* array, int dst_index, int src_index, int len);
707 706
708 // Sloppy mode arguments object size. 707 // Sloppy mode arguments object size.
709 static const int kSloppyArgumentsObjectSize = 708 static const int kSloppyArgumentsObjectSize =
710 JSObject::kHeaderSize + 2 * kPointerSize; 709 JSObject::kHeaderSize + 2 * kPointerSize;
711 // Strict mode arguments has no callee so it is smaller. 710 // Strict mode arguments has no callee so it is smaller.
712 static const int kStrictArgumentsObjectSize = 711 static const int kStrictArgumentsObjectSize =
713 JSObject::kHeaderSize + 1 * kPointerSize; 712 JSObject::kHeaderSize + 1 * kPointerSize;
714 // Indicies for direct access into argument objects. 713 // Indicies for direct access into argument objects.
715 static const int kArgumentsLengthIndex = 0; 714 static const int kArgumentsLengthIndex = 0;
716 // callee is only valid in sloppy mode. 715 // callee is only valid in sloppy mode.
717 static const int kArgumentsCalleeIndex = 1; 716 static const int kArgumentsCalleeIndex = 1;
718 717
719 // Converts an int into either a Smi or a HeapNumber object.
720 // Returns Failure::RetryAfterGC(requested_bytes, space) if the allocation
721 // failed.
722 // Please note this does not perform a garbage collection.
723 MUST_USE_RESULT inline MaybeObject* NumberFromUint32(
724 uint32_t value, PretenureFlag pretenure = NOT_TENURED);
725
726 // Finalizes an external string by deleting the associated external 718 // Finalizes an external string by deleting the associated external
727 // data and clearing the resource pointer. 719 // data and clearing the resource pointer.
728 inline void FinalizeExternalString(String* string); 720 inline void FinalizeExternalString(String* string);
729 721
730 // Initialize a filler object to keep the ability to iterate over the heap 722 // Initialize a filler object to keep the ability to iterate over the heap
731 // when shortening objects. 723 // when shortening objects.
732 void CreateFillerObjectAt(Address addr, int size); 724 void CreateFillerObjectAt(Address addr, int size);
733 725
734 bool CanMoveObjectStart(HeapObject* object); 726 bool CanMoveObjectStart(HeapObject* object);
735 727
(...skipping 697 matching lines...) Expand 10 before | Expand all | Expand 10 after
1433 1425
1434 void EnsureWeakObjectToCodeTable(); 1426 void EnsureWeakObjectToCodeTable();
1435 1427
1436 static void FatalProcessOutOfMemory(const char* location, 1428 static void FatalProcessOutOfMemory(const char* location,
1437 bool take_snapshot = false); 1429 bool take_snapshot = false);
1438 1430
1439 protected: 1431 protected:
1440 // Methods made available to tests. 1432 // Methods made available to tests.
1441 1433
1442 // Allocates a JS Map in the heap. 1434 // Allocates a JS Map in the heap.
1443 MUST_USE_RESULT MaybeObject* AllocateMap( 1435 MUST_USE_RESULT AllocationResult AllocateMap(
1444 InstanceType instance_type, 1436 InstanceType instance_type,
1445 int instance_size, 1437 int instance_size,
1446 ElementsKind elements_kind = TERMINAL_FAST_ELEMENTS_KIND); 1438 ElementsKind elements_kind = TERMINAL_FAST_ELEMENTS_KIND);
1447 1439
1448 // Allocates and initializes a new JavaScript object based on a 1440 // Allocates and initializes a new JavaScript object based on a
1449 // constructor. 1441 // constructor.
1450 // If allocation_site is non-null, then a memento is emitted after the object 1442 // If allocation_site is non-null, then a memento is emitted after the object
1451 // that points to the site. 1443 // that points to the site.
1452 MUST_USE_RESULT MaybeObject* AllocateJSObject( 1444 MUST_USE_RESULT AllocationResult AllocateJSObject(
1453 JSFunction* constructor, 1445 JSFunction* constructor,
1454 PretenureFlag pretenure = NOT_TENURED, 1446 PretenureFlag pretenure = NOT_TENURED,
1455 AllocationSite* allocation_site = NULL); 1447 AllocationSite* allocation_site = NULL);
1456 1448
1457 // Allocates and initializes a new JavaScript object based on a map. 1449 // Allocates and initializes a new JavaScript object based on a map.
1458 // Passing an allocation site means that a memento will be created that 1450 // Passing an allocation site means that a memento will be created that
1459 // points to the site. 1451 // points to the site.
1460 MUST_USE_RESULT MaybeObject* AllocateJSObjectFromMap( 1452 MUST_USE_RESULT AllocationResult AllocateJSObjectFromMap(
1461 Map* map, 1453 Map* map,
1462 PretenureFlag pretenure = NOT_TENURED, 1454 PretenureFlag pretenure = NOT_TENURED,
1463 bool alloc_props = true, 1455 bool alloc_props = true,
1464 AllocationSite* allocation_site = NULL); 1456 AllocationSite* allocation_site = NULL);
1465 1457
1466 // Allocated a HeapNumber from value. 1458 // Allocated a HeapNumber from value.
1467 MUST_USE_RESULT MaybeObject* AllocateHeapNumber( 1459 MUST_USE_RESULT AllocationResult AllocateHeapNumber(
1468 double value, PretenureFlag pretenure = NOT_TENURED); 1460 double value, PretenureFlag pretenure = NOT_TENURED);
1469 1461
1470 // Allocate a byte array of the specified length 1462 // Allocate a byte array of the specified length
1471 MUST_USE_RESULT MaybeObject* AllocateByteArray( 1463 MUST_USE_RESULT AllocationResult AllocateByteArray(
1472 int length, 1464 int length,
1473 PretenureFlag pretenure = NOT_TENURED); 1465 PretenureFlag pretenure = NOT_TENURED);
1474 1466
1475 // Allocates an arguments object - optionally with an elements array. 1467 // Allocates an arguments object - optionally with an elements array.
1476 MUST_USE_RESULT MaybeObject* AllocateArgumentsObject( 1468 MUST_USE_RESULT AllocationResult AllocateArgumentsObject(
1477 Object* callee, int length); 1469 Object* callee, int length);
1478 1470
1479 // Copy the code and scope info part of the code object, but insert 1471 // Copy the code and scope info part of the code object, but insert
1480 // the provided data as the relocation information. 1472 // the provided data as the relocation information.
1481 MUST_USE_RESULT MaybeObject* CopyCode(Code* code, Vector<byte> reloc_info); 1473 MUST_USE_RESULT AllocationResult CopyCode(Code* code,
1474 Vector<byte> reloc_info);
1482 1475
1483 MUST_USE_RESULT MaybeObject* CopyCode(Code* code); 1476 MUST_USE_RESULT AllocationResult CopyCode(Code* code);
1484 1477
1485 // Allocates a fixed array initialized with undefined values 1478 // Allocates a fixed array initialized with undefined values
1486 MUST_USE_RESULT MaybeObject* AllocateFixedArray( 1479 MUST_USE_RESULT AllocationResult AllocateFixedArray(
1487 int length, 1480 int length,
1488 PretenureFlag pretenure = NOT_TENURED); 1481 PretenureFlag pretenure = NOT_TENURED);
1489 1482
1490 private: 1483 private:
1491 Heap(); 1484 Heap();
1492 1485
1493 // This can be calculated directly from a pointer to the heap; however, it is 1486 // This can be calculated directly from a pointer to the heap; however, it is
1494 // more expedient to get at the isolate directly from within Heap methods. 1487 // more expedient to get at the isolate directly from within Heap methods.
1495 Isolate* isolate_; 1488 Isolate* isolate_;
1496 1489
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after
1732 ASSERT(preferred_old_space == OLD_POINTER_SPACE || 1725 ASSERT(preferred_old_space == OLD_POINTER_SPACE ||
1733 preferred_old_space == OLD_DATA_SPACE); 1726 preferred_old_space == OLD_DATA_SPACE);
1734 if (object_size > Page::kMaxRegularHeapObjectSize) return LO_SPACE; 1727 if (object_size > Page::kMaxRegularHeapObjectSize) return LO_SPACE;
1735 return (pretenure == TENURED) ? preferred_old_space : NEW_SPACE; 1728 return (pretenure == TENURED) ? preferred_old_space : NEW_SPACE;
1736 } 1729 }
1737 1730
1738 // Allocate an uninitialized object. The memory is non-executable if the 1731 // Allocate an uninitialized object. The memory is non-executable if the
1739 // hardware and OS allow. This is the single choke-point for allocations 1732 // hardware and OS allow. This is the single choke-point for allocations
1740 // performed by the runtime and should not be bypassed (to extend this to 1733 // performed by the runtime and should not be bypassed (to extend this to
1741 // inlined allocations, use the Heap::DisableInlineAllocation() support). 1734 // inlined allocations, use the Heap::DisableInlineAllocation() support).
1742 MUST_USE_RESULT inline MaybeObject* AllocateRaw(int size_in_bytes, 1735 MUST_USE_RESULT inline AllocationResult AllocateRaw(
1743 AllocationSpace space, 1736 int size_in_bytes,
1744 AllocationSpace retry_space); 1737 AllocationSpace space,
1738 AllocationSpace retry_space);
1745 1739
1746 // Allocates a heap object based on the map. 1740 // Allocates a heap object based on the map.
1747 MUST_USE_RESULT MaybeObject* Allocate(Map* map, AllocationSpace space, 1741 MUST_USE_RESULT AllocationResult Allocate(
1748 AllocationSite* allocation_site = NULL); 1742 Map* map,
1743 AllocationSpace space,
1744 AllocationSite* allocation_site = NULL);
1749 1745
1750 // Allocates a partial map for bootstrapping. 1746 // Allocates a partial map for bootstrapping.
1751 MUST_USE_RESULT MaybeObject* AllocatePartialMap(InstanceType instance_type, 1747 MUST_USE_RESULT AllocationResult AllocatePartialMap(
1752 int instance_size); 1748 InstanceType instance_type,
1749 int instance_size);
1753 1750
1754 // Initializes a JSObject based on its map. 1751 // Initializes a JSObject based on its map.
1755 void InitializeJSObjectFromMap(JSObject* obj, 1752 void InitializeJSObjectFromMap(JSObject* obj,
1756 FixedArray* properties, 1753 FixedArray* properties,
1757 Map* map); 1754 Map* map);
1758 void InitializeAllocationMemento(AllocationMemento* memento, 1755 void InitializeAllocationMemento(AllocationMemento* memento,
1759 AllocationSite* allocation_site); 1756 AllocationSite* allocation_site);
1760 1757
1761 // Allocate a block of memory in the given space (filled with a filler). 1758 // Allocate a block of memory in the given space (filled with a filler).
1762 // Used as a fall-back for generated code when the space is full. 1759 // Used as a fall-back for generated code when the space is full.
1763 MUST_USE_RESULT MaybeObject* AllocateFillerObject(int size, 1760 MUST_USE_RESULT AllocationResult AllocateFillerObject(int size,
1764 bool double_align, 1761 bool double_align,
1765 AllocationSpace space); 1762 AllocationSpace space);
1766 1763
1767 // Allocate an uninitialized fixed array. 1764 // Allocate an uninitialized fixed array.
1768 MUST_USE_RESULT MaybeObject* AllocateRawFixedArray( 1765 MUST_USE_RESULT AllocationResult AllocateRawFixedArray(
1769 int length, PretenureFlag pretenure); 1766 int length, PretenureFlag pretenure);
1770 1767
1771 // Allocate an uninitialized fixed double array. 1768 // Allocate an uninitialized fixed double array.
1772 MUST_USE_RESULT MaybeObject* AllocateRawFixedDoubleArray( 1769 MUST_USE_RESULT AllocationResult AllocateRawFixedDoubleArray(
1773 int length, PretenureFlag pretenure); 1770 int length, PretenureFlag pretenure);
1774 1771
1775 // Allocate an initialized fixed array with the given filler value. 1772 // Allocate an initialized fixed array with the given filler value.
1776 MUST_USE_RESULT MaybeObject* AllocateFixedArrayWithFiller( 1773 MUST_USE_RESULT AllocationResult AllocateFixedArrayWithFiller(
1777 int length, PretenureFlag pretenure, Object* filler); 1774 int length, PretenureFlag pretenure, Object* filler);
1778 1775
1779 // Allocate and partially initializes a String. There are two String 1776 // Allocate and partially initializes a String. There are two String
1780 // encodings: ASCII and two byte. These functions allocate a string of the 1777 // encodings: ASCII and two byte. These functions allocate a string of the
1781 // given length and set its map and length fields. The characters of the 1778 // given length and set its map and length fields. The characters of the
1782 // string are uninitialized. 1779 // string are uninitialized.
1783 MUST_USE_RESULT MaybeObject* AllocateRawOneByteString( 1780 MUST_USE_RESULT AllocationResult AllocateRawOneByteString(
1784 int length, PretenureFlag pretenure); 1781 int length, PretenureFlag pretenure);
1785 MUST_USE_RESULT MaybeObject* AllocateRawTwoByteString( 1782 MUST_USE_RESULT AllocationResult AllocateRawTwoByteString(
1786 int length, PretenureFlag pretenure); 1783 int length, PretenureFlag pretenure);
1787 1784
1788 // Allocates and fully initializes a String. There are two String 1785 // Allocates and fully initializes a String. There are two String
1789 // encodings: ASCII and two byte. One should choose between the three string 1786 // encodings: ASCII and two byte. One should choose between the three string
1790 // allocation functions based on the encoding of the string buffer used to 1787 // allocation functions based on the encoding of the string buffer used to
1791 // initialized the string. 1788 // initialized the string.
1792 // - ...FromAscii initializes the string from a buffer that is ASCII 1789 // - ...FromAscii initializes the string from a buffer that is ASCII
1793 // encoded (it does not check that the buffer is ASCII encoded) and the 1790 // encoded (it does not check that the buffer is ASCII encoded) and the
1794 // result will be ASCII encoded. 1791 // result will be ASCII encoded.
1795 // - ...FromUTF8 initializes the string from a buffer that is UTF-8 1792 // - ...FromUTF8 initializes the string from a buffer that is UTF-8
1796 // encoded. If the characters are all single-byte characters, the 1793 // encoded. If the characters are all single-byte characters, the
1797 // result will be ASCII encoded, otherwise it will converted to two 1794 // result will be ASCII encoded, otherwise it will converted to two
1798 // byte. 1795 // byte.
1799 // - ...FromTwoByte initializes the string from a buffer that is two-byte 1796 // - ...FromTwoByte initializes the string from a buffer that is two-byte
1800 // encoded. If the characters are all single-byte characters, the 1797 // encoded. If the characters are all single-byte characters, the
1801 // result will be converted to ASCII, otherwise it will be left as 1798 // result will be converted to ASCII, otherwise it will be left as
1802 // two-byte. 1799 // two-byte.
1803 MUST_USE_RESULT MaybeObject* AllocateStringFromUtf8Slow( 1800 MUST_USE_RESULT AllocationResult AllocateStringFromUtf8Slow(
1804 Vector<const char> str, 1801 Vector<const char> str,
1805 int non_ascii_start, 1802 int non_ascii_start,
1806 PretenureFlag pretenure = NOT_TENURED); 1803 PretenureFlag pretenure = NOT_TENURED);
1807 MUST_USE_RESULT MaybeObject* AllocateStringFromTwoByte( 1804 MUST_USE_RESULT AllocationResult AllocateStringFromTwoByte(
1808 Vector<const uc16> str, 1805 Vector<const uc16> str,
1809 PretenureFlag pretenure = NOT_TENURED); 1806 PretenureFlag pretenure = NOT_TENURED);
1810 1807
1811 bool CreateInitialMaps(); 1808 bool CreateInitialMaps();
1812 void CreateInitialObjects(); 1809 void CreateInitialObjects();
1813 1810
1814 // Allocates an internalized string in old space based on the character 1811 // Allocates an internalized string in old space based on the character
1815 // stream. 1812 // stream.
1816 MUST_USE_RESULT inline MaybeObject* AllocateInternalizedStringFromUtf8( 1813 MUST_USE_RESULT inline AllocationResult AllocateInternalizedStringFromUtf8(
1817 Vector<const char> str, 1814 Vector<const char> str,
1818 int chars, 1815 int chars,
1819 uint32_t hash_field); 1816 uint32_t hash_field);
1820 1817
1821 MUST_USE_RESULT inline MaybeObject* AllocateOneByteInternalizedString( 1818 MUST_USE_RESULT inline AllocationResult AllocateOneByteInternalizedString(
1822 Vector<const uint8_t> str, 1819 Vector<const uint8_t> str,
1823 uint32_t hash_field); 1820 uint32_t hash_field);
1824 1821
1825 MUST_USE_RESULT inline MaybeObject* AllocateTwoByteInternalizedString( 1822 MUST_USE_RESULT inline AllocationResult AllocateTwoByteInternalizedString(
1826 Vector<const uc16> str, 1823 Vector<const uc16> str,
1827 uint32_t hash_field); 1824 uint32_t hash_field);
1828 1825
1829 template<bool is_one_byte, typename T> 1826 template<bool is_one_byte, typename T>
1830 MUST_USE_RESULT MaybeObject* AllocateInternalizedStringImpl( 1827 MUST_USE_RESULT AllocationResult AllocateInternalizedStringImpl(
1831 T t, int chars, uint32_t hash_field); 1828 T t, int chars, uint32_t hash_field);
1832 1829
1833 template<typename T> 1830 template<typename T>
1834 MUST_USE_RESULT inline MaybeObject* AllocateInternalizedStringImpl( 1831 MUST_USE_RESULT inline AllocationResult AllocateInternalizedStringImpl(
1835 T t, int chars, uint32_t hash_field); 1832 T t, int chars, uint32_t hash_field);
1836 1833
1837 // Allocates an uninitialized fixed array. It must be filled by the caller. 1834 // Allocates an uninitialized fixed array. It must be filled by the caller.
1838 MUST_USE_RESULT MaybeObject* AllocateUninitializedFixedArray(int length); 1835 MUST_USE_RESULT AllocationResult AllocateUninitializedFixedArray(int length);
1839 1836
1840 // Make a copy of src and return it. Returns 1837 // Make a copy of src and return it. Returns
1841 // Failure::RetryAfterGC(requested_bytes, space) if the allocation failed. 1838 // Failure::RetryAfterGC(requested_bytes, space) if the allocation failed.
1842 MUST_USE_RESULT inline MaybeObject* CopyFixedArray(FixedArray* src); 1839 MUST_USE_RESULT inline AllocationResult CopyFixedArray(FixedArray* src);
1843 1840
1844 // Make a copy of src, set the map, and return the copy. Returns 1841 // Make a copy of src, set the map, and return the copy. Returns
1845 // Failure::RetryAfterGC(requested_bytes, space) if the allocation failed. 1842 // Failure::RetryAfterGC(requested_bytes, space) if the allocation failed.
1846 MUST_USE_RESULT MaybeObject* CopyFixedArrayWithMap(FixedArray* src, Map* map); 1843 MUST_USE_RESULT AllocationResult CopyFixedArrayWithMap(FixedArray* src,
1844 Map* map);
1847 1845
1848 // Make a copy of src and return it. Returns 1846 // Make a copy of src and return it. Returns
1849 // Failure::RetryAfterGC(requested_bytes, space) if the allocation failed. 1847 // Failure::RetryAfterGC(requested_bytes, space) if the allocation failed.
1850 MUST_USE_RESULT inline MaybeObject* CopyFixedDoubleArray( 1848 MUST_USE_RESULT inline AllocationResult CopyFixedDoubleArray(
1851 FixedDoubleArray* src); 1849 FixedDoubleArray* src);
1852 1850
1853 // Make a copy of src and return it. Returns 1851 // Make a copy of src and return it. Returns
1854 // Failure::RetryAfterGC(requested_bytes, space) if the allocation failed. 1852 // Failure::RetryAfterGC(requested_bytes, space) if the allocation failed.
1855 MUST_USE_RESULT inline MaybeObject* CopyConstantPoolArray( 1853 MUST_USE_RESULT inline AllocationResult CopyConstantPoolArray(
1856 ConstantPoolArray* src); 1854 ConstantPoolArray* src);
1857 1855
1858 1856
1859 // Computes a single character string where the character has code. 1857 // Computes a single character string where the character has code.
1860 // A cache is used for ASCII codes. 1858 // A cache is used for ASCII codes.
1861 MUST_USE_RESULT MaybeObject* LookupSingleCharacterStringFromCode( 1859 MUST_USE_RESULT AllocationResult LookupSingleCharacterStringFromCode(
1862 uint16_t code); 1860 uint16_t code);
1863 1861
1864 // Allocate a symbol in old space. 1862 // Allocate a symbol in old space.
1865 MUST_USE_RESULT MaybeObject* AllocateSymbol(); 1863 MUST_USE_RESULT AllocationResult AllocateSymbol();
1866 1864
1867 // Make a copy of src, set the map, and return the copy. 1865 // Make a copy of src, set the map, and return the copy.
1868 MUST_USE_RESULT MaybeObject* CopyConstantPoolArrayWithMap( 1866 MUST_USE_RESULT AllocationResult CopyConstantPoolArrayWithMap(
1869 ConstantPoolArray* src, Map* map); 1867 ConstantPoolArray* src, Map* map);
1870 1868
1871 MUST_USE_RESULT MaybeObject* AllocateConstantPoolArray( 1869 MUST_USE_RESULT AllocationResult AllocateConstantPoolArray(
1872 int number_of_int64_entries, 1870 int number_of_int64_entries,
1873 int number_of_code_ptr_entries, 1871 int number_of_code_ptr_entries,
1874 int number_of_heap_ptr_entries, 1872 int number_of_heap_ptr_entries,
1875 int number_of_int32_entries); 1873 int number_of_int32_entries);
1876 1874
1877 // Allocates an external array of the specified length and type. 1875 // Allocates an external array of the specified length and type.
1878 MUST_USE_RESULT MaybeObject* AllocateExternalArray( 1876 MUST_USE_RESULT AllocationResult AllocateExternalArray(
1879 int length, 1877 int length,
1880 ExternalArrayType array_type, 1878 ExternalArrayType array_type,
1881 void* external_pointer, 1879 void* external_pointer,
1882 PretenureFlag pretenure); 1880 PretenureFlag pretenure);
1883 1881
1884 // Allocates a fixed typed array of the specified length and type. 1882 // Allocates a fixed typed array of the specified length and type.
1885 MUST_USE_RESULT MaybeObject* AllocateFixedTypedArray( 1883 MUST_USE_RESULT AllocationResult AllocateFixedTypedArray(
1886 int length, 1884 int length,
1887 ExternalArrayType array_type, 1885 ExternalArrayType array_type,
1888 PretenureFlag pretenure); 1886 PretenureFlag pretenure);
1889 1887
1890 // Make a copy of src and return it. 1888 // Make a copy of src and return it.
1891 MUST_USE_RESULT MaybeObject* CopyAndTenureFixedCOWArray(FixedArray* src); 1889 MUST_USE_RESULT AllocationResult CopyAndTenureFixedCOWArray(FixedArray* src);
1892 1890
1893 // Make a copy of src, set the map, and return the copy. 1891 // Make a copy of src, set the map, and return the copy.
1894 MUST_USE_RESULT MaybeObject* CopyFixedDoubleArrayWithMap( 1892 MUST_USE_RESULT AllocationResult CopyFixedDoubleArrayWithMap(
1895 FixedDoubleArray* src, Map* map); 1893 FixedDoubleArray* src, Map* map);
1896 1894
1897 // Allocates a fixed double array with uninitialized values. Returns 1895 // Allocates a fixed double array with uninitialized values. Returns
1898 MUST_USE_RESULT MaybeObject* AllocateUninitializedFixedDoubleArray( 1896 MUST_USE_RESULT AllocationResult AllocateUninitializedFixedDoubleArray(
1899 int length, 1897 int length,
1900 PretenureFlag pretenure = NOT_TENURED); 1898 PretenureFlag pretenure = NOT_TENURED);
1901 1899
1902 // These five Create*EntryStub functions are here and forced to not be inlined 1900 // These five Create*EntryStub functions are here and forced to not be inlined
1903 // because of a gcc-4.4 bug that assigns wrong vtable entries. 1901 // because of a gcc-4.4 bug that assigns wrong vtable entries.
1904 NO_INLINE(void CreateJSEntryStub()); 1902 NO_INLINE(void CreateJSEntryStub());
1905 NO_INLINE(void CreateJSConstructEntryStub()); 1903 NO_INLINE(void CreateJSConstructEntryStub());
1906 1904
1907 void CreateFixedStubs(); 1905 void CreateFixedStubs();
1908 1906
1909 // Allocate empty fixed array. 1907 // Allocate empty fixed array.
1910 MUST_USE_RESULT MaybeObject* AllocateEmptyFixedArray(); 1908 MUST_USE_RESULT AllocationResult AllocateEmptyFixedArray();
1911 1909
1912 // Allocate empty external array of given type. 1910 // Allocate empty external array of given type.
1913 MUST_USE_RESULT MaybeObject* AllocateEmptyExternalArray( 1911 MUST_USE_RESULT AllocationResult AllocateEmptyExternalArray(
1914 ExternalArrayType array_type); 1912 ExternalArrayType array_type);
1915 1913
1916 // Allocate empty fixed typed array of given type. 1914 // Allocate empty fixed typed array of given type.
1917 MUST_USE_RESULT MaybeObject* AllocateEmptyFixedTypedArray( 1915 MUST_USE_RESULT AllocationResult AllocateEmptyFixedTypedArray(
1918 ExternalArrayType array_type); 1916 ExternalArrayType array_type);
1919 1917
1920 // Allocate empty constant pool array. 1918 // Allocate empty constant pool array.
1921 MUST_USE_RESULT MaybeObject* AllocateEmptyConstantPoolArray(); 1919 MUST_USE_RESULT AllocationResult AllocateEmptyConstantPoolArray();
1922 1920
1923 // Allocate a tenured simple cell. 1921 // Allocate a tenured simple cell.
1924 MUST_USE_RESULT MaybeObject* AllocateCell(Object* value); 1922 MUST_USE_RESULT AllocationResult AllocateCell(Object* value);
1925 1923
1926 // Allocate a tenured JS global property cell initialized with the hole. 1924 // Allocate a tenured JS global property cell initialized with the hole.
1927 MUST_USE_RESULT MaybeObject* AllocatePropertyCell(); 1925 MUST_USE_RESULT AllocationResult AllocatePropertyCell();
1928 1926
1929 // Allocates a new utility object in the old generation. 1927 // Allocates a new utility object in the old generation.
1930 MUST_USE_RESULT MaybeObject* AllocateStruct(InstanceType type); 1928 MUST_USE_RESULT AllocationResult AllocateStruct(InstanceType type);
1931 1929
1932 // Allocates a new foreign object. 1930 // Allocates a new foreign object.
1933 MUST_USE_RESULT MaybeObject* AllocateForeign( 1931 MUST_USE_RESULT AllocationResult AllocateForeign(
1934 Address address, PretenureFlag pretenure = NOT_TENURED); 1932 Address address, PretenureFlag pretenure = NOT_TENURED);
1935 1933
1936 MUST_USE_RESULT MaybeObject* AllocateCode(int object_size, bool immovable); 1934 MUST_USE_RESULT AllocationResult AllocateCode(int object_size,
1935 bool immovable);
1937 1936
1938 MUST_USE_RESULT MaybeObject* InternalizeStringWithKey(HashTableKey* key); 1937 MUST_USE_RESULT AllocationResult InternalizeStringWithKey(HashTableKey* key);
1939 1938
1940 MUST_USE_RESULT MaybeObject* InternalizeString(String* str); 1939 MUST_USE_RESULT AllocationResult InternalizeString(String* str);
1941 1940
1942 // Performs a minor collection in new generation. 1941 // Performs a minor collection in new generation.
1943 void Scavenge(); 1942 void Scavenge();
1944 1943
1945 // Commits from space if it is uncommitted. 1944 // Commits from space if it is uncommitted.
1946 void EnsureFromSpaceIsCommitted(); 1945 void EnsureFromSpaceIsCommitted();
1947 1946
1948 // Uncommit unused semi space. 1947 // Uncommit unused semi space.
1949 bool UncommitFromSpace() { return new_space_.UncommitFromSpace(); } 1948 bool UncommitFromSpace() { return new_space_.UncommitFromSpace(); }
1950 1949
(...skipping 859 matching lines...) Expand 10 before | Expand all | Expand 10 after
2810 DisallowHeapAllocation no_allocation; // i.e. no gc allowed. 2809 DisallowHeapAllocation no_allocation; // i.e. no gc allowed.
2811 2810
2812 private: 2811 private:
2813 DISALLOW_IMPLICIT_CONSTRUCTORS(PathTracer); 2812 DISALLOW_IMPLICIT_CONSTRUCTORS(PathTracer);
2814 }; 2813 };
2815 #endif // DEBUG 2814 #endif // DEBUG
2816 2815
2817 } } // namespace v8::internal 2816 } } // namespace v8::internal
2818 2817
2819 #endif // V8_HEAP_H_ 2818 #endif // V8_HEAP_H_
OLDNEW
« no previous file with comments | « src/handles-inl.h ('k') | src/heap.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698