| OLD | NEW | 
|---|
| 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 680 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 691 | 691 | 
| 692   // Clear the Instanceof cache (used when a prototype changes). | 692   // Clear the Instanceof cache (used when a prototype changes). | 
| 693   inline void ClearInstanceofCache(); | 693   inline void ClearInstanceofCache(); | 
| 694 | 694 | 
| 695   // Iterates the whole code space to clear all ICs of the given kind. | 695   // Iterates the whole code space to clear all ICs of the given kind. | 
| 696   void ClearAllICsByKind(Code::Kind kind); | 696   void ClearAllICsByKind(Code::Kind kind); | 
| 697 | 697 | 
| 698   // For use during bootup. | 698   // For use during bootup. | 
| 699   void RepairFreeListsAfterBoot(); | 699   void RepairFreeListsAfterBoot(); | 
| 700 | 700 | 
| 701   // Allocates an internalized string in old space based on the character |  | 
| 702   // stream. Returns Failure::RetryAfterGC(requested_bytes, space) if the |  | 
| 703   // allocation failed. |  | 
| 704   // Please note this function does not perform a garbage collection. |  | 
| 705   MUST_USE_RESULT inline MaybeObject* AllocateInternalizedStringFromUtf8( |  | 
| 706       Vector<const char> str, |  | 
| 707       int chars, |  | 
| 708       uint32_t hash_field); |  | 
| 709 |  | 
| 710   MUST_USE_RESULT inline MaybeObject* AllocateOneByteInternalizedString( |  | 
| 711         Vector<const uint8_t> str, |  | 
| 712         uint32_t hash_field); |  | 
| 713 |  | 
| 714   MUST_USE_RESULT inline MaybeObject* AllocateTwoByteInternalizedString( |  | 
| 715         Vector<const uc16> str, |  | 
| 716         uint32_t hash_field); |  | 
| 717 |  | 
| 718   template<typename T> | 701   template<typename T> | 
| 719   static inline bool IsOneByte(T t, int chars); | 702   static inline bool IsOneByte(T t, int chars); | 
| 720 | 703 | 
| 721   template<typename T> |  | 
| 722   MUST_USE_RESULT inline MaybeObject* AllocateInternalizedStringImpl( |  | 
| 723       T t, int chars, uint32_t hash_field); |  | 
| 724 |  | 
| 725   // Allocates a fixed array initialized with undefined values |  | 
| 726   // Returns Failure::RetryAfterGC(requested_bytes, space) if the allocation |  | 
| 727   // failed. |  | 
| 728   // Please note this does not perform a garbage collection. |  | 
| 729   MUST_USE_RESULT MaybeObject* AllocateFixedArray( |  | 
| 730       int length, |  | 
| 731       PretenureFlag pretenure = NOT_TENURED); |  | 
| 732 |  | 
| 733   // Allocates an uninitialized fixed array. It must be filled by the caller. |  | 
| 734   // |  | 
| 735   // Returns Failure::RetryAfterGC(requested_bytes, space) if the allocation |  | 
| 736   // failed. |  | 
| 737   // Please note this does not perform a garbage collection. |  | 
| 738   MUST_USE_RESULT MaybeObject* AllocateUninitializedFixedArray(int length); |  | 
| 739 |  | 
| 740   // Move len elements within a given array from src_index index to dst_index | 704   // Move len elements within a given array from src_index index to dst_index | 
| 741   // index. | 705   // index. | 
| 742   void MoveElements(FixedArray* array, int dst_index, int src_index, int len); | 706   void MoveElements(FixedArray* array, int dst_index, int src_index, int len); | 
| 743 | 707 | 
| 744   // Make a copy of src and return it. Returns |  | 
| 745   // Failure::RetryAfterGC(requested_bytes, space) if the allocation failed. |  | 
| 746   MUST_USE_RESULT inline MaybeObject* CopyFixedArray(FixedArray* src); |  | 
| 747 |  | 
| 748   // Make a copy of src, set the map, and return the copy. Returns |  | 
| 749   // Failure::RetryAfterGC(requested_bytes, space) if the allocation failed. |  | 
| 750   MUST_USE_RESULT MaybeObject* CopyFixedArrayWithMap(FixedArray* src, Map* map); |  | 
| 751 |  | 
| 752   // Make a copy of src and return it. Returns |  | 
| 753   // Failure::RetryAfterGC(requested_bytes, space) if the allocation failed. |  | 
| 754   MUST_USE_RESULT inline MaybeObject* CopyFixedDoubleArray( |  | 
| 755       FixedDoubleArray* src); |  | 
| 756 |  | 
| 757   // Make a copy of src and return it. Returns |  | 
| 758   // Failure::RetryAfterGC(requested_bytes, space) if the allocation failed. |  | 
| 759   MUST_USE_RESULT inline MaybeObject* CopyConstantPoolArray( |  | 
| 760       ConstantPoolArray* src); |  | 
| 761 |  | 
| 762   // AllocateHashTable is identical to AllocateFixedArray except |  | 
| 763   // that the resulting object has hash_table_map as map. |  | 
| 764   MUST_USE_RESULT MaybeObject* AllocateHashTable( |  | 
| 765       int length, PretenureFlag pretenure = NOT_TENURED); |  | 
| 766 |  | 
| 767   // Sloppy mode arguments object size. | 708   // Sloppy mode arguments object size. | 
| 768   static const int kSloppyArgumentsObjectSize = | 709   static const int kSloppyArgumentsObjectSize = | 
| 769       JSObject::kHeaderSize + 2 * kPointerSize; | 710       JSObject::kHeaderSize + 2 * kPointerSize; | 
| 770   // Strict mode arguments has no callee so it is smaller. | 711   // Strict mode arguments has no callee so it is smaller. | 
| 771   static const int kStrictArgumentsObjectSize = | 712   static const int kStrictArgumentsObjectSize = | 
| 772       JSObject::kHeaderSize + 1 * kPointerSize; | 713       JSObject::kHeaderSize + 1 * kPointerSize; | 
| 773   // Indicies for direct access into argument objects. | 714   // Indicies for direct access into argument objects. | 
| 774   static const int kArgumentsLengthIndex = 0; | 715   static const int kArgumentsLengthIndex = 0; | 
| 775   // callee is only valid in sloppy mode. | 716   // callee is only valid in sloppy mode. | 
| 776   static const int kArgumentsCalleeIndex = 1; | 717   static const int kArgumentsCalleeIndex = 1; | 
| (...skipping 14 matching lines...) Expand all  Loading... | 
| 791   void CreateFillerObjectAt(Address addr, int size); | 732   void CreateFillerObjectAt(Address addr, int size); | 
| 792 | 733 | 
| 793   bool CanMoveObjectStart(HeapObject* object); | 734   bool CanMoveObjectStart(HeapObject* object); | 
| 794 | 735 | 
| 795   enum InvocationMode { FROM_GC, FROM_MUTATOR }; | 736   enum InvocationMode { FROM_GC, FROM_MUTATOR }; | 
| 796 | 737 | 
| 797   // Maintain marking consistency for IncrementalMarking. | 738   // Maintain marking consistency for IncrementalMarking. | 
| 798   void AdjustLiveBytes(Address address, int by, InvocationMode mode); | 739   void AdjustLiveBytes(Address address, int by, InvocationMode mode); | 
| 799 | 740 | 
| 800   bool InternalizeStringIfExists(String* str, String** result); | 741   bool InternalizeStringIfExists(String* str, String** result); | 
| 801   bool InternalizeTwoCharsStringIfExists(String* str, String** result); |  | 
| 802 | 742 | 
| 803   // Converts the given boolean condition to JavaScript boolean value. | 743   // Converts the given boolean condition to JavaScript boolean value. | 
| 804   inline Object* ToBoolean(bool condition); | 744   inline Object* ToBoolean(bool condition); | 
| 805 | 745 | 
| 806   // Performs garbage collection operation. | 746   // Performs garbage collection operation. | 
| 807   // Returns whether there is a chance that another major GC could | 747   // Returns whether there is a chance that another major GC could | 
| 808   // collect more garbage. | 748   // collect more garbage. | 
| 809   inline bool CollectGarbage( | 749   inline bool CollectGarbage( | 
| 810       AllocationSpace space, | 750       AllocationSpace space, | 
| 811       const char* gc_reason = NULL, | 751       const char* gc_reason = NULL, | 
| (...skipping 723 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1535   // Allocates an arguments object - optionally with an elements array. | 1475   // Allocates an arguments object - optionally with an elements array. | 
| 1536   MUST_USE_RESULT MaybeObject* AllocateArgumentsObject( | 1476   MUST_USE_RESULT MaybeObject* AllocateArgumentsObject( | 
| 1537       Object* callee, int length); | 1477       Object* callee, int length); | 
| 1538 | 1478 | 
| 1539   // Copy the code and scope info part of the code object, but insert | 1479   // Copy the code and scope info part of the code object, but insert | 
| 1540   // the provided data as the relocation information. | 1480   // the provided data as the relocation information. | 
| 1541   MUST_USE_RESULT MaybeObject* CopyCode(Code* code, Vector<byte> reloc_info); | 1481   MUST_USE_RESULT MaybeObject* CopyCode(Code* code, Vector<byte> reloc_info); | 
| 1542 | 1482 | 
| 1543   MUST_USE_RESULT MaybeObject* CopyCode(Code* code); | 1483   MUST_USE_RESULT MaybeObject* CopyCode(Code* code); | 
| 1544 | 1484 | 
|  | 1485   // Allocates a fixed array initialized with undefined values | 
|  | 1486   MUST_USE_RESULT MaybeObject* AllocateFixedArray( | 
|  | 1487       int length, | 
|  | 1488       PretenureFlag pretenure = NOT_TENURED); | 
|  | 1489 | 
| 1545  private: | 1490  private: | 
| 1546   Heap(); | 1491   Heap(); | 
| 1547 | 1492 | 
| 1548   // This can be calculated directly from a pointer to the heap; however, it is | 1493   // This can be calculated directly from a pointer to the heap; however, it is | 
| 1549   // more expedient to get at the isolate directly from within Heap methods. | 1494   // more expedient to get at the isolate directly from within Heap methods. | 
| 1550   Isolate* isolate_; | 1495   Isolate* isolate_; | 
| 1551 | 1496 | 
| 1552   Object* roots_[kRootListLength]; | 1497   Object* roots_[kRootListLength]; | 
| 1553 | 1498 | 
| 1554   intptr_t code_range_size_; | 1499   intptr_t code_range_size_; | 
| (...skipping 304 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1859       Vector<const char> str, | 1804       Vector<const char> str, | 
| 1860       int non_ascii_start, | 1805       int non_ascii_start, | 
| 1861       PretenureFlag pretenure = NOT_TENURED); | 1806       PretenureFlag pretenure = NOT_TENURED); | 
| 1862   MUST_USE_RESULT MaybeObject* AllocateStringFromTwoByte( | 1807   MUST_USE_RESULT MaybeObject* AllocateStringFromTwoByte( | 
| 1863       Vector<const uc16> str, | 1808       Vector<const uc16> str, | 
| 1864       PretenureFlag pretenure = NOT_TENURED); | 1809       PretenureFlag pretenure = NOT_TENURED); | 
| 1865 | 1810 | 
| 1866   bool CreateInitialMaps(); | 1811   bool CreateInitialMaps(); | 
| 1867   void CreateInitialObjects(); | 1812   void CreateInitialObjects(); | 
| 1868 | 1813 | 
|  | 1814   // Allocates an internalized string in old space based on the character | 
|  | 1815   // stream. | 
|  | 1816   MUST_USE_RESULT inline MaybeObject* AllocateInternalizedStringFromUtf8( | 
|  | 1817       Vector<const char> str, | 
|  | 1818       int chars, | 
|  | 1819       uint32_t hash_field); | 
|  | 1820 | 
|  | 1821   MUST_USE_RESULT inline MaybeObject* AllocateOneByteInternalizedString( | 
|  | 1822         Vector<const uint8_t> str, | 
|  | 1823         uint32_t hash_field); | 
|  | 1824 | 
|  | 1825   MUST_USE_RESULT inline MaybeObject* AllocateTwoByteInternalizedString( | 
|  | 1826         Vector<const uc16> str, | 
|  | 1827         uint32_t hash_field); | 
|  | 1828 | 
| 1869   template<bool is_one_byte, typename T> | 1829   template<bool is_one_byte, typename T> | 
| 1870   MUST_USE_RESULT MaybeObject* AllocateInternalizedStringImpl( | 1830   MUST_USE_RESULT MaybeObject* AllocateInternalizedStringImpl( | 
| 1871       T t, int chars, uint32_t hash_field); | 1831       T t, int chars, uint32_t hash_field); | 
| 1872 | 1832 | 
|  | 1833   template<typename T> | 
|  | 1834   MUST_USE_RESULT inline MaybeObject* AllocateInternalizedStringImpl( | 
|  | 1835       T t, int chars, uint32_t hash_field); | 
|  | 1836 | 
|  | 1837   // Allocates an uninitialized fixed array. It must be filled by the caller. | 
|  | 1838   MUST_USE_RESULT MaybeObject* AllocateUninitializedFixedArray(int length); | 
|  | 1839 | 
|  | 1840   // Make a copy of src and return it. Returns | 
|  | 1841   // Failure::RetryAfterGC(requested_bytes, space) if the allocation failed. | 
|  | 1842   MUST_USE_RESULT inline MaybeObject* CopyFixedArray(FixedArray* src); | 
|  | 1843 | 
|  | 1844   // Make a copy of src, set the map, and return the copy. Returns | 
|  | 1845   // Failure::RetryAfterGC(requested_bytes, space) if the allocation failed. | 
|  | 1846   MUST_USE_RESULT MaybeObject* CopyFixedArrayWithMap(FixedArray* src, Map* map); | 
|  | 1847 | 
|  | 1848   // Make a copy of src and return it. Returns | 
|  | 1849   // Failure::RetryAfterGC(requested_bytes, space) if the allocation failed. | 
|  | 1850   MUST_USE_RESULT inline MaybeObject* CopyFixedDoubleArray( | 
|  | 1851       FixedDoubleArray* src); | 
|  | 1852 | 
|  | 1853   // Make a copy of src and return it. Returns | 
|  | 1854   // Failure::RetryAfterGC(requested_bytes, space) if the allocation failed. | 
|  | 1855   MUST_USE_RESULT inline MaybeObject* CopyConstantPoolArray( | 
|  | 1856       ConstantPoolArray* src); | 
|  | 1857 | 
|  | 1858 | 
| 1873   // Computes a single character string where the character has code. | 1859   // Computes a single character string where the character has code. | 
| 1874   // A cache is used for ASCII codes. | 1860   // A cache is used for ASCII codes. | 
| 1875   MUST_USE_RESULT MaybeObject* LookupSingleCharacterStringFromCode( | 1861   MUST_USE_RESULT MaybeObject* LookupSingleCharacterStringFromCode( | 
| 1876       uint16_t code); | 1862       uint16_t code); | 
| 1877 | 1863 | 
| 1878   // Allocate a symbol in old space. | 1864   // Allocate a symbol in old space. | 
| 1879   MUST_USE_RESULT MaybeObject* AllocateSymbol(); | 1865   MUST_USE_RESULT MaybeObject* AllocateSymbol(); | 
| 1880 | 1866 | 
| 1881   // Make a copy of src, set the map, and return the copy. | 1867   // Make a copy of src, set the map, and return the copy. | 
| 1882   MUST_USE_RESULT MaybeObject* CopyConstantPoolArrayWithMap( | 1868   MUST_USE_RESULT MaybeObject* CopyConstantPoolArrayWithMap( | 
| (...skipping 941 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2824   DisallowHeapAllocation no_allocation;  // i.e. no gc allowed. | 2810   DisallowHeapAllocation no_allocation;  // i.e. no gc allowed. | 
| 2825 | 2811 | 
| 2826  private: | 2812  private: | 
| 2827   DISALLOW_IMPLICIT_CONSTRUCTORS(PathTracer); | 2813   DISALLOW_IMPLICIT_CONSTRUCTORS(PathTracer); | 
| 2828 }; | 2814 }; | 
| 2829 #endif  // DEBUG | 2815 #endif  // DEBUG | 
| 2830 | 2816 | 
| 2831 } }  // namespace v8::internal | 2817 } }  // namespace v8::internal | 
| 2832 | 2818 | 
| 2833 #endif  // V8_HEAP_H_ | 2819 #endif  // V8_HEAP_H_ | 
| OLD | NEW | 
|---|