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_OBJECTS_H_ | 5 #ifndef V8_OBJECTS_H_ |
6 #define V8_OBJECTS_H_ | 6 #define V8_OBJECTS_H_ |
7 | 7 |
8 #include <iosfwd> | 8 #include <iosfwd> |
9 | 9 |
10 #include "src/allocation.h" | 10 #include "src/allocation.h" |
(...skipping 1757 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1768 }; | 1768 }; |
1769 | 1769 |
1770 | 1770 |
1771 // Indicator for one component of an AccessorPair. | 1771 // Indicator for one component of an AccessorPair. |
1772 enum AccessorComponent { | 1772 enum AccessorComponent { |
1773 ACCESSOR_GETTER, | 1773 ACCESSOR_GETTER, |
1774 ACCESSOR_SETTER | 1774 ACCESSOR_SETTER |
1775 }; | 1775 }; |
1776 | 1776 |
1777 | 1777 |
| 1778 enum KeyFilter { SKIP_SYMBOLS, INCLUDE_SYMBOLS }; |
| 1779 |
| 1780 |
1778 // JSReceiver includes types on which properties can be defined, i.e., | 1781 // JSReceiver includes types on which properties can be defined, i.e., |
1779 // JSObject and JSProxy. | 1782 // JSObject and JSProxy. |
1780 class JSReceiver: public HeapObject { | 1783 class JSReceiver: public HeapObject { |
1781 public: | 1784 public: |
1782 DECLARE_CAST(JSReceiver) | 1785 DECLARE_CAST(JSReceiver) |
1783 | 1786 |
1784 // ES6 section 7.1.1 ToPrimitive | 1787 // ES6 section 7.1.1 ToPrimitive |
1785 MUST_USE_RESULT static MaybeHandle<Object> ToPrimitive( | 1788 MUST_USE_RESULT static MaybeHandle<Object> ToPrimitive( |
1786 Handle<JSReceiver> receiver, | 1789 Handle<JSReceiver> receiver, |
1787 ToPrimitiveHint hint = ToPrimitiveHint::kDefault); | 1790 ToPrimitiveHint hint = ToPrimitiveHint::kDefault); |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1847 // Retrieves a permanent object identity hash code. May create and store a | 1850 // Retrieves a permanent object identity hash code. May create and store a |
1848 // hash code if needed and none exists. | 1851 // hash code if needed and none exists. |
1849 inline static Handle<Smi> GetOrCreateIdentityHash( | 1852 inline static Handle<Smi> GetOrCreateIdentityHash( |
1850 Handle<JSReceiver> object); | 1853 Handle<JSReceiver> object); |
1851 | 1854 |
1852 enum KeyCollectionType { OWN_ONLY, INCLUDE_PROTOS }; | 1855 enum KeyCollectionType { OWN_ONLY, INCLUDE_PROTOS }; |
1853 | 1856 |
1854 // Computes the enumerable keys for a JSObject. Used for implementing | 1857 // Computes the enumerable keys for a JSObject. Used for implementing |
1855 // "for (n in object) { }". | 1858 // "for (n in object) { }". |
1856 MUST_USE_RESULT static MaybeHandle<FixedArray> GetKeys( | 1859 MUST_USE_RESULT static MaybeHandle<FixedArray> GetKeys( |
1857 Handle<JSReceiver> object, | 1860 Handle<JSReceiver> object, KeyCollectionType type, |
1858 KeyCollectionType type); | 1861 KeyFilter filter = SKIP_SYMBOLS); |
1859 | 1862 |
1860 private: | 1863 private: |
1861 DISALLOW_IMPLICIT_CONSTRUCTORS(JSReceiver); | 1864 DISALLOW_IMPLICIT_CONSTRUCTORS(JSReceiver); |
1862 }; | 1865 }; |
1863 | 1866 |
1864 | 1867 |
1865 // The JSObject describes real heap allocated JavaScript objects with | 1868 // The JSObject describes real heap allocated JavaScript objects with |
1866 // properties. | 1869 // properties. |
1867 // Note that the map of JSObject changes during execution to enable inline | 1870 // Note that the map of JSObject changes during execution to enable inline |
1868 // caching. | 1871 // caching. |
(...skipping 643 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2512 inline bool ContainsOnlySmisOrHoles(); | 2515 inline bool ContainsOnlySmisOrHoles(); |
2513 | 2516 |
2514 // Gives access to raw memory which stores the array's data. | 2517 // Gives access to raw memory which stores the array's data. |
2515 inline Object** data_start(); | 2518 inline Object** data_start(); |
2516 | 2519 |
2517 inline void FillWithHoles(int from, int to); | 2520 inline void FillWithHoles(int from, int to); |
2518 | 2521 |
2519 // Shrink length and insert filler objects. | 2522 // Shrink length and insert filler objects. |
2520 void Shrink(int length); | 2523 void Shrink(int length); |
2521 | 2524 |
2522 enum KeyFilter { ALL_KEYS, NON_SYMBOL_KEYS }; | |
2523 | |
2524 // Copy a sub array from the receiver to dest. | 2525 // Copy a sub array from the receiver to dest. |
2525 void CopyTo(int pos, FixedArray* dest, int dest_pos, int len); | 2526 void CopyTo(int pos, FixedArray* dest, int dest_pos, int len); |
2526 | 2527 |
2527 // Garbage collection support. | 2528 // Garbage collection support. |
2528 static int SizeFor(int length) { return kHeaderSize + length * kPointerSize; } | 2529 static int SizeFor(int length) { return kHeaderSize + length * kPointerSize; } |
2529 | 2530 |
2530 // Code Generation support. | 2531 // Code Generation support. |
2531 static int OffsetOfElementAt(int index) { return SizeFor(index); } | 2532 static int OffsetOfElementAt(int index) { return SizeFor(index); } |
2532 | 2533 |
2533 // Garbage collection support. | 2534 // Garbage collection support. |
(...skipping 8066 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10600 return value; | 10601 return value; |
10601 } | 10602 } |
10602 }; | 10603 }; |
10603 | 10604 |
10604 | 10605 |
10605 class KeyAccumulator final BASE_EMBEDDED { | 10606 class KeyAccumulator final BASE_EMBEDDED { |
10606 public: | 10607 public: |
10607 explicit KeyAccumulator(Isolate* isolate) : isolate_(isolate), length_(0) {} | 10608 explicit KeyAccumulator(Isolate* isolate) : isolate_(isolate), length_(0) {} |
10608 | 10609 |
10609 void AddKey(Handle<Object> key, int check_limit); | 10610 void AddKey(Handle<Object> key, int check_limit); |
10610 void AddKeys(Handle<FixedArray> array, FixedArray::KeyFilter filter); | 10611 void AddKeys(Handle<FixedArray> array, KeyFilter filter); |
10611 void AddKeys(Handle<JSObject> array, FixedArray::KeyFilter filter); | 10612 void AddKeys(Handle<JSObject> array, KeyFilter filter); |
10612 void PrepareForComparisons(int count); | 10613 void PrepareForComparisons(int count); |
10613 Handle<FixedArray> GetKeys(); | 10614 Handle<FixedArray> GetKeys(); |
10614 | 10615 |
10615 int GetLength() { return length_; } | 10616 int GetLength() { return length_; } |
10616 | 10617 |
10617 private: | 10618 private: |
10618 void EnsureCapacity(int capacity); | 10619 void EnsureCapacity(int capacity); |
10619 void Grow(); | 10620 void Grow(); |
10620 | 10621 |
10621 Isolate* isolate_; | 10622 Isolate* isolate_; |
10622 Handle<FixedArray> keys_; | 10623 Handle<FixedArray> keys_; |
10623 Handle<OrderedHashSet> set_; | 10624 Handle<OrderedHashSet> set_; |
10624 int length_; | 10625 int length_; |
10625 DISALLOW_COPY_AND_ASSIGN(KeyAccumulator); | 10626 DISALLOW_COPY_AND_ASSIGN(KeyAccumulator); |
10626 }; | 10627 }; |
10627 | 10628 |
10628 } // NOLINT, false-positive due to second-order macros. | 10629 } // NOLINT, false-positive due to second-order macros. |
10629 } // NOLINT, false-positive due to second-order macros. | 10630 } // NOLINT, false-positive due to second-order macros. |
10630 | 10631 |
10631 #endif // V8_OBJECTS_H_ | 10632 #endif // V8_OBJECTS_H_ |
OLD | NEW |