OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 1523 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1534 DISALLOW_IMPLICIT_CONSTRUCTORS(Object); | 1534 DISALLOW_IMPLICIT_CONSTRUCTORS(Object); |
1535 }; | 1535 }; |
1536 | 1536 |
1537 | 1537 |
1538 // Smi represents integer Numbers that can be stored in 31 bits. | 1538 // Smi represents integer Numbers that can be stored in 31 bits. |
1539 // Smis are immediate which means they are NOT allocated in the heap. | 1539 // Smis are immediate which means they are NOT allocated in the heap. |
1540 // The this pointer has the following format: [31 bit signed int] 0 | 1540 // The this pointer has the following format: [31 bit signed int] 0 |
1541 // For long smis it has the following format: | 1541 // For long smis it has the following format: |
1542 // [32 bit signed int] [31 bits zero padding] 0 | 1542 // [32 bit signed int] [31 bits zero padding] 0 |
1543 // Smi stands for small integer. | 1543 // Smi stands for small integer. |
1544 class Smi FINAL : public Object { | 1544 class Smi V8_FINAL : public Object { |
1545 public: | 1545 public: |
1546 // Returns the integer value. | 1546 // Returns the integer value. |
1547 inline int value(); | 1547 inline int value(); |
1548 | 1548 |
1549 // Convert a value to a Smi object. | 1549 // Convert a value to a Smi object. |
1550 static inline Smi* FromInt(int value); | 1550 static inline Smi* FromInt(int value); |
1551 | 1551 |
1552 static inline Smi* FromIntptr(intptr_t value); | 1552 static inline Smi* FromIntptr(intptr_t value); |
1553 | 1553 |
1554 // Returns whether value can be represented in a Smi. | 1554 // Returns whether value can be represented in a Smi. |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1595 // | 1595 // |
1596 // The next three bits, 4-6, are an allocation space tag 'sss'. The | 1596 // The next three bits, 4-6, are an allocation space tag 'sss'. The |
1597 // allocation space tag is 000 for all failure types except | 1597 // allocation space tag is 000 for all failure types except |
1598 // RETRY_AFTER_GC. For RETRY_AFTER_GC, the possible values are the | 1598 // RETRY_AFTER_GC. For RETRY_AFTER_GC, the possible values are the |
1599 // allocation spaces (the encoding is found in globals.h). | 1599 // allocation spaces (the encoding is found in globals.h). |
1600 | 1600 |
1601 // Failure type tag info. | 1601 // Failure type tag info. |
1602 const int kFailureTypeTagSize = 2; | 1602 const int kFailureTypeTagSize = 2; |
1603 const int kFailureTypeTagMask = (1 << kFailureTypeTagSize) - 1; | 1603 const int kFailureTypeTagMask = (1 << kFailureTypeTagSize) - 1; |
1604 | 1604 |
1605 class Failure FINAL : public MaybeObject { | 1605 class Failure V8_FINAL : public MaybeObject { |
1606 public: | 1606 public: |
1607 // RuntimeStubs assumes EXCEPTION = 1 in the compiler-generated code. | 1607 // RuntimeStubs assumes EXCEPTION = 1 in the compiler-generated code. |
1608 enum Type { | 1608 enum Type { |
1609 RETRY_AFTER_GC = 0, | 1609 RETRY_AFTER_GC = 0, |
1610 EXCEPTION = 1, // Returning this marker tells the real exception | 1610 EXCEPTION = 1, // Returning this marker tells the real exception |
1611 // is in Isolate::pending_exception. | 1611 // is in Isolate::pending_exception. |
1612 INTERNAL_ERROR = 2, | 1612 INTERNAL_ERROR = 2, |
1613 OUT_OF_MEMORY_EXCEPTION = 3 | 1613 OUT_OF_MEMORY_EXCEPTION = 3 |
1614 }; | 1614 }; |
1615 | 1615 |
(...skipping 29 matching lines...) Expand all Loading... |
1645 static inline Failure* Construct(Type type, intptr_t value = 0); | 1645 static inline Failure* Construct(Type type, intptr_t value = 0); |
1646 | 1646 |
1647 DISALLOW_IMPLICIT_CONSTRUCTORS(Failure); | 1647 DISALLOW_IMPLICIT_CONSTRUCTORS(Failure); |
1648 }; | 1648 }; |
1649 | 1649 |
1650 | 1650 |
1651 // Heap objects typically have a map pointer in their first word. However, | 1651 // Heap objects typically have a map pointer in their first word. However, |
1652 // during GC other data (e.g. mark bits, forwarding addresses) is sometimes | 1652 // during GC other data (e.g. mark bits, forwarding addresses) is sometimes |
1653 // encoded in the first word. The class MapWord is an abstraction of the | 1653 // encoded in the first word. The class MapWord is an abstraction of the |
1654 // value in a heap object's first word. | 1654 // value in a heap object's first word. |
1655 class MapWord FINAL BASE_EMBEDDED { | 1655 class MapWord V8_FINAL BASE_EMBEDDED { |
1656 public: | 1656 public: |
1657 // Normal state: the map word contains a map pointer. | 1657 // Normal state: the map word contains a map pointer. |
1658 | 1658 |
1659 // Create a map word from a map pointer. | 1659 // Create a map word from a map pointer. |
1660 static inline MapWord FromMap(Map* map); | 1660 static inline MapWord FromMap(Map* map); |
1661 | 1661 |
1662 // View this map word as a map pointer. | 1662 // View this map word as a map pointer. |
1663 inline Map* ToMap(); | 1663 inline Map* ToMap(); |
1664 | 1664 |
1665 | 1665 |
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1834 template<typename StaticVisitor> | 1834 template<typename StaticVisitor> |
1835 static inline void IterateBody(HeapObject* obj, int object_size) { | 1835 static inline void IterateBody(HeapObject* obj, int object_size) { |
1836 StaticVisitor::VisitPointers(HeapObject::RawField(obj, start_offset), | 1836 StaticVisitor::VisitPointers(HeapObject::RawField(obj, start_offset), |
1837 HeapObject::RawField(obj, object_size)); | 1837 HeapObject::RawField(obj, object_size)); |
1838 } | 1838 } |
1839 }; | 1839 }; |
1840 | 1840 |
1841 | 1841 |
1842 // The HeapNumber class describes heap allocated numbers that cannot be | 1842 // The HeapNumber class describes heap allocated numbers that cannot be |
1843 // represented in a Smi (small integer) | 1843 // represented in a Smi (small integer) |
1844 class HeapNumber FINAL : public HeapObject { | 1844 class HeapNumber V8_FINAL : public HeapObject { |
1845 public: | 1845 public: |
1846 // [value]: number value. | 1846 // [value]: number value. |
1847 inline double value(); | 1847 inline double value(); |
1848 inline void set_value(double value); | 1848 inline void set_value(double value); |
1849 | 1849 |
1850 // Casting. | 1850 // Casting. |
1851 static inline HeapNumber* cast(Object* obj); | 1851 static inline HeapNumber* cast(Object* obj); |
1852 | 1852 |
1853 // Dispatched behavior. | 1853 // Dispatched behavior. |
1854 bool HeapNumberBooleanValue(); | 1854 bool HeapNumberBooleanValue(); |
(...skipping 819 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2674 #endif | 2674 #endif |
2675 | 2675 |
2676 void PrintElementsTransition( | 2676 void PrintElementsTransition( |
2677 FILE* file, ElementsKind from_kind, FixedArrayBase* from_elements, | 2677 FILE* file, ElementsKind from_kind, FixedArrayBase* from_elements, |
2678 ElementsKind to_kind, FixedArrayBase* to_elements); | 2678 ElementsKind to_kind, FixedArrayBase* to_elements); |
2679 | 2679 |
2680 void PrintInstanceMigration(FILE* file, Map* original_map, Map* new_map); | 2680 void PrintInstanceMigration(FILE* file, Map* original_map, Map* new_map); |
2681 | 2681 |
2682 #ifdef DEBUG | 2682 #ifdef DEBUG |
2683 // Structure for collecting spill information about JSObjects. | 2683 // Structure for collecting spill information about JSObjects. |
2684 class SpillInformation FINAL { | 2684 class SpillInformation V8_FINAL { |
2685 public: | 2685 public: |
2686 void Clear(); | 2686 void Clear(); |
2687 void Print(); | 2687 void Print(); |
2688 int number_of_objects_; | 2688 int number_of_objects_; |
2689 int number_of_objects_with_fast_properties_; | 2689 int number_of_objects_with_fast_properties_; |
2690 int number_of_objects_with_fast_elements_; | 2690 int number_of_objects_with_fast_elements_; |
2691 int number_of_fast_used_fields_; | 2691 int number_of_fast_used_fields_; |
2692 int number_of_fast_unused_fields_; | 2692 int number_of_fast_unused_fields_; |
2693 int number_of_slow_used_properties_; | 2693 int number_of_slow_used_properties_; |
2694 int number_of_slow_unused_properties_; | 2694 int number_of_slow_unused_properties_; |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2735 // to the same object requires fewer allocations and copies. | 2735 // to the same object requires fewer allocations and copies. |
2736 static const int kFieldsAdded = 3; | 2736 static const int kFieldsAdded = 3; |
2737 | 2737 |
2738 // Layout description. | 2738 // Layout description. |
2739 static const int kPropertiesOffset = HeapObject::kHeaderSize; | 2739 static const int kPropertiesOffset = HeapObject::kHeaderSize; |
2740 static const int kElementsOffset = kPropertiesOffset + kPointerSize; | 2740 static const int kElementsOffset = kPropertiesOffset + kPointerSize; |
2741 static const int kHeaderSize = kElementsOffset + kPointerSize; | 2741 static const int kHeaderSize = kElementsOffset + kPointerSize; |
2742 | 2742 |
2743 STATIC_CHECK(kHeaderSize == Internals::kJSObjectHeaderSize); | 2743 STATIC_CHECK(kHeaderSize == Internals::kJSObjectHeaderSize); |
2744 | 2744 |
2745 class BodyDescriptor FINAL | 2745 class BodyDescriptor V8_FINAL |
2746 : public FlexibleBodyDescriptor<kPropertiesOffset> { | 2746 : public FlexibleBodyDescriptor<kPropertiesOffset> { |
2747 public: | 2747 public: |
2748 static inline int SizeOf(Map* map, HeapObject* object); | 2748 static inline int SizeOf(Map* map, HeapObject* object); |
2749 }; | 2749 }; |
2750 | 2750 |
2751 // Enqueue change record for Object.observe. May cause GC. | 2751 // Enqueue change record for Object.observe. May cause GC. |
2752 static void EnqueueChangeRecord(Handle<JSObject> object, | 2752 static void EnqueueChangeRecord(Handle<JSObject> object, |
2753 const char* type, | 2753 const char* type, |
2754 Handle<Name> name, | 2754 Handle<Name> name, |
2755 Handle<Object> old_value); | 2755 Handle<Object> old_value); |
(...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2975 // Swap two elements in a pair of arrays. If this array and the | 2975 // Swap two elements in a pair of arrays. If this array and the |
2976 // numbers array are the same object, the elements are only swapped | 2976 // numbers array are the same object, the elements are only swapped |
2977 // once. | 2977 // once. |
2978 void SwapPairs(FixedArray* numbers, int i, int j); | 2978 void SwapPairs(FixedArray* numbers, int i, int j); |
2979 | 2979 |
2980 // Sort prefix of this array and the numbers array as pairs wrt. the | 2980 // Sort prefix of this array and the numbers array as pairs wrt. the |
2981 // numbers. If the numbers array and the this array are the same | 2981 // numbers. If the numbers array and the this array are the same |
2982 // object, the prefix of this array is sorted. | 2982 // object, the prefix of this array is sorted. |
2983 void SortPairs(FixedArray* numbers, uint32_t len); | 2983 void SortPairs(FixedArray* numbers, uint32_t len); |
2984 | 2984 |
2985 class BodyDescriptor FINAL : public FlexibleBodyDescriptor<kHeaderSize> { | 2985 class BodyDescriptor V8_FINAL : public FlexibleBodyDescriptor<kHeaderSize> { |
2986 public: | 2986 public: |
2987 static inline int SizeOf(Map* map, HeapObject* object) { | 2987 static inline int SizeOf(Map* map, HeapObject* object) { |
2988 return SizeFor(reinterpret_cast<FixedArray*>(object)->length()); | 2988 return SizeFor(reinterpret_cast<FixedArray*>(object)->length()); |
2989 } | 2989 } |
2990 }; | 2990 }; |
2991 | 2991 |
2992 protected: | 2992 protected: |
2993 // Set operation on FixedArray without using write barriers. Can | 2993 // Set operation on FixedArray without using write barriers. Can |
2994 // only be used for storing old space objects or smis. | 2994 // only be used for storing old space objects or smis. |
2995 static inline void NoWriteBarrierSet(FixedArray* array, | 2995 static inline void NoWriteBarrierSet(FixedArray* array, |
2996 int index, | 2996 int index, |
2997 Object* value); | 2997 Object* value); |
2998 | 2998 |
2999 // Set operation on FixedArray without incremental write barrier. Can | 2999 // Set operation on FixedArray without incremental write barrier. Can |
3000 // only be used if the object is guaranteed to be white (whiteness witness | 3000 // only be used if the object is guaranteed to be white (whiteness witness |
3001 // is present). | 3001 // is present). |
3002 static inline void NoIncrementalWriteBarrierSet(FixedArray* array, | 3002 static inline void NoIncrementalWriteBarrierSet(FixedArray* array, |
3003 int index, | 3003 int index, |
3004 Object* value); | 3004 Object* value); |
3005 | 3005 |
3006 private: | 3006 private: |
3007 STATIC_CHECK(kHeaderSize == Internals::kFixedArrayHeaderSize); | 3007 STATIC_CHECK(kHeaderSize == Internals::kFixedArrayHeaderSize); |
3008 | 3008 |
3009 DISALLOW_IMPLICIT_CONSTRUCTORS(FixedArray); | 3009 DISALLOW_IMPLICIT_CONSTRUCTORS(FixedArray); |
3010 }; | 3010 }; |
3011 | 3011 |
3012 | 3012 |
3013 // FixedDoubleArray describes fixed-sized arrays with element type double. | 3013 // FixedDoubleArray describes fixed-sized arrays with element type double. |
3014 class FixedDoubleArray FINAL : public FixedArrayBase { | 3014 class FixedDoubleArray V8_FINAL : public FixedArrayBase { |
3015 public: | 3015 public: |
3016 // Setter and getter for elements. | 3016 // Setter and getter for elements. |
3017 inline double get_scalar(int index); | 3017 inline double get_scalar(int index); |
3018 inline int64_t get_representation(int index); | 3018 inline int64_t get_representation(int index); |
3019 MUST_USE_RESULT inline MaybeObject* get(int index); | 3019 MUST_USE_RESULT inline MaybeObject* get(int index); |
3020 inline void set(int index, double value); | 3020 inline void set(int index, double value); |
3021 inline void set_the_hole(int index); | 3021 inline void set_the_hole(int index); |
3022 | 3022 |
3023 // Checking for the hole. | 3023 // Checking for the hole. |
3024 inline bool is_the_hole(int index); | 3024 inline bool is_the_hole(int index); |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3061 | 3061 |
3062 | 3062 |
3063 // DescriptorArrays are fixed arrays used to hold instance descriptors. | 3063 // DescriptorArrays are fixed arrays used to hold instance descriptors. |
3064 // The format of the these objects is: | 3064 // The format of the these objects is: |
3065 // [0]: Number of descriptors | 3065 // [0]: Number of descriptors |
3066 // [1]: Either Smi(0) if uninitialized, or a pointer to small fixed array: | 3066 // [1]: Either Smi(0) if uninitialized, or a pointer to small fixed array: |
3067 // [0]: pointer to fixed array with enum cache | 3067 // [0]: pointer to fixed array with enum cache |
3068 // [1]: either Smi(0) or pointer to fixed array with indices | 3068 // [1]: either Smi(0) or pointer to fixed array with indices |
3069 // [2]: first key | 3069 // [2]: first key |
3070 // [2 + number of descriptors * kDescriptorSize]: start of slack | 3070 // [2 + number of descriptors * kDescriptorSize]: start of slack |
3071 class DescriptorArray FINAL : public FixedArray { | 3071 class DescriptorArray V8_FINAL : public FixedArray { |
3072 public: | 3072 public: |
3073 // WhitenessWitness is used to prove that a descriptor array is white | 3073 // WhitenessWitness is used to prove that a descriptor array is white |
3074 // (unmarked), so incremental write barriers can be skipped because the | 3074 // (unmarked), so incremental write barriers can be skipped because the |
3075 // marking invariant cannot be broken and slots pointing into evacuation | 3075 // marking invariant cannot be broken and slots pointing into evacuation |
3076 // candidates will be discovered when the object is scanned. A witness is | 3076 // candidates will be discovered when the object is scanned. A witness is |
3077 // always stack-allocated right after creating an array. By allocating a | 3077 // always stack-allocated right after creating an array. By allocating a |
3078 // witness, incremental marking is globally disabled. The witness is then | 3078 // witness, incremental marking is globally disabled. The witness is then |
3079 // passed along wherever needed to statically prove that the array is known to | 3079 // passed along wherever needed to statically prove that the array is known to |
3080 // be white. | 3080 // be white. |
3081 class WhitenessWitness FINAL { | 3081 class WhitenessWitness V8_FINAL { |
3082 public: | 3082 public: |
3083 inline explicit WhitenessWitness(FixedArray* array); | 3083 inline explicit WhitenessWitness(FixedArray* array); |
3084 inline ~WhitenessWitness(); | 3084 inline ~WhitenessWitness(); |
3085 | 3085 |
3086 private: | 3086 private: |
3087 IncrementalMarking* marking_; | 3087 IncrementalMarking* marking_; |
3088 }; | 3088 }; |
3089 | 3089 |
3090 // Returns true for both shared empty_descriptor_array and for smis, which the | 3090 // Returns true for both shared empty_descriptor_array and for smis, which the |
3091 // map uses to encode additional bit fields when the descriptor array is not | 3091 // map uses to encode additional bit fields when the descriptor array is not |
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3279 static const int kMaxNumberOfDescriptors = 1024 + 512; | 3279 static const int kMaxNumberOfDescriptors = 1024 + 512; |
3280 | 3280 |
3281 // Returns the fixed array length required to hold number_of_descriptors | 3281 // Returns the fixed array length required to hold number_of_descriptors |
3282 // descriptors. | 3282 // descriptors. |
3283 static int LengthFor(int number_of_descriptors) { | 3283 static int LengthFor(int number_of_descriptors) { |
3284 return ToKeyIndex(number_of_descriptors); | 3284 return ToKeyIndex(number_of_descriptors); |
3285 } | 3285 } |
3286 | 3286 |
3287 private: | 3287 private: |
3288 // An entry in a DescriptorArray, represented as an (array, index) pair. | 3288 // An entry in a DescriptorArray, represented as an (array, index) pair. |
3289 class Entry FINAL { | 3289 class Entry V8_FINAL { |
3290 public: | 3290 public: |
3291 inline explicit Entry(DescriptorArray* descs, int index) : | 3291 inline explicit Entry(DescriptorArray* descs, int index) : |
3292 descs_(descs), index_(index) { } | 3292 descs_(descs), index_(index) { } |
3293 | 3293 |
3294 inline PropertyType type() { return descs_->GetType(index_); } | 3294 inline PropertyType type() { return descs_->GetType(index_); } |
3295 inline Object* GetCallbackObject() { return descs_->GetValue(index_); } | 3295 inline Object* GetCallbackObject() { return descs_->GetValue(index_); } |
3296 | 3296 |
3297 private: | 3297 private: |
3298 DescriptorArray* descs_; | 3298 DescriptorArray* descs_; |
3299 int index_; | 3299 int index_; |
(...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3565 // Returns the hash value for object. | 3565 // Returns the hash value for object. |
3566 virtual uint32_t HashForObject(Object* key) = 0; | 3566 virtual uint32_t HashForObject(Object* key) = 0; |
3567 // Returns the key object for storing into the hash table. | 3567 // Returns the key object for storing into the hash table. |
3568 // If allocations fails a failure object is returned. | 3568 // If allocations fails a failure object is returned. |
3569 MUST_USE_RESULT virtual MaybeObject* AsObject(Heap* heap) = 0; | 3569 MUST_USE_RESULT virtual MaybeObject* AsObject(Heap* heap) = 0; |
3570 // Required. | 3570 // Required. |
3571 virtual ~HashTableKey() {} | 3571 virtual ~HashTableKey() {} |
3572 }; | 3572 }; |
3573 | 3573 |
3574 | 3574 |
3575 class StringTableShape FINAL : public BaseShape<HashTableKey*> { | 3575 class StringTableShape V8_FINAL : public BaseShape<HashTableKey*> { |
3576 public: | 3576 public: |
3577 static inline bool IsMatch(HashTableKey* key, Object* value) { | 3577 static inline bool IsMatch(HashTableKey* key, Object* value) { |
3578 return key->IsMatch(value); | 3578 return key->IsMatch(value); |
3579 } | 3579 } |
3580 static inline uint32_t Hash(HashTableKey* key) { | 3580 static inline uint32_t Hash(HashTableKey* key) { |
3581 return key->Hash(); | 3581 return key->Hash(); |
3582 } | 3582 } |
3583 static inline uint32_t HashForObject(HashTableKey* key, Object* object) { | 3583 static inline uint32_t HashForObject(HashTableKey* key, Object* object) { |
3584 return key->HashForObject(object); | 3584 return key->HashForObject(object); |
3585 } | 3585 } |
3586 MUST_USE_RESULT static inline MaybeObject* AsObject(Heap* heap, | 3586 MUST_USE_RESULT static inline MaybeObject* AsObject(Heap* heap, |
3587 HashTableKey* key) { | 3587 HashTableKey* key) { |
3588 return key->AsObject(heap); | 3588 return key->AsObject(heap); |
3589 } | 3589 } |
3590 | 3590 |
3591 static const int kPrefixSize = 0; | 3591 static const int kPrefixSize = 0; |
3592 static const int kEntrySize = 1; | 3592 static const int kEntrySize = 1; |
3593 }; | 3593 }; |
3594 | 3594 |
3595 class SeqOneByteString; | 3595 class SeqOneByteString; |
3596 | 3596 |
3597 // StringTable. | 3597 // StringTable. |
3598 // | 3598 // |
3599 // No special elements in the prefix and the element size is 1 | 3599 // No special elements in the prefix and the element size is 1 |
3600 // because only the string itself (the key) needs to be stored. | 3600 // because only the string itself (the key) needs to be stored. |
3601 class StringTable FINAL : public HashTable<StringTableShape, HashTableKey*> { | 3601 class StringTable V8_FINAL : public HashTable<StringTableShape, HashTableKey*> { |
3602 public: | 3602 public: |
3603 // Find string in the string table. If it is not there yet, it is | 3603 // Find string in the string table. If it is not there yet, it is |
3604 // added. The return value is the string table which might have | 3604 // added. The return value is the string table which might have |
3605 // been enlarged. If the return value is not a failure, the string | 3605 // been enlarged. If the return value is not a failure, the string |
3606 // pointer *s is set to the string found. | 3606 // pointer *s is set to the string found. |
3607 MUST_USE_RESULT MaybeObject* LookupUtf8String( | 3607 MUST_USE_RESULT MaybeObject* LookupUtf8String( |
3608 Vector<const char> str, | 3608 Vector<const char> str, |
3609 Object** s); | 3609 Object** s); |
3610 MUST_USE_RESULT MaybeObject* LookupOneByteString( | 3610 MUST_USE_RESULT MaybeObject* LookupOneByteString( |
3611 Vector<const uint8_t> str, | 3611 Vector<const uint8_t> str, |
(...skipping 19 matching lines...) Expand all Loading... |
3631 | 3631 |
3632 private: | 3632 private: |
3633 MUST_USE_RESULT MaybeObject* LookupKey(HashTableKey* key, Object** s); | 3633 MUST_USE_RESULT MaybeObject* LookupKey(HashTableKey* key, Object** s); |
3634 | 3634 |
3635 template <bool seq_ascii> friend class JsonParser; | 3635 template <bool seq_ascii> friend class JsonParser; |
3636 | 3636 |
3637 DISALLOW_IMPLICIT_CONSTRUCTORS(StringTable); | 3637 DISALLOW_IMPLICIT_CONSTRUCTORS(StringTable); |
3638 }; | 3638 }; |
3639 | 3639 |
3640 | 3640 |
3641 class MapCacheShape FINAL : public BaseShape<HashTableKey*> { | 3641 class MapCacheShape V8_FINAL : public BaseShape<HashTableKey*> { |
3642 public: | 3642 public: |
3643 static inline bool IsMatch(HashTableKey* key, Object* value) { | 3643 static inline bool IsMatch(HashTableKey* key, Object* value) { |
3644 return key->IsMatch(value); | 3644 return key->IsMatch(value); |
3645 } | 3645 } |
3646 static inline uint32_t Hash(HashTableKey* key) { | 3646 static inline uint32_t Hash(HashTableKey* key) { |
3647 return key->Hash(); | 3647 return key->Hash(); |
3648 } | 3648 } |
3649 | 3649 |
3650 static inline uint32_t HashForObject(HashTableKey* key, Object* object) { | 3650 static inline uint32_t HashForObject(HashTableKey* key, Object* object) { |
3651 return key->HashForObject(object); | 3651 return key->HashForObject(object); |
3652 } | 3652 } |
3653 | 3653 |
3654 MUST_USE_RESULT static inline MaybeObject* AsObject(Heap* heap, | 3654 MUST_USE_RESULT static inline MaybeObject* AsObject(Heap* heap, |
3655 HashTableKey* key) { | 3655 HashTableKey* key) { |
3656 return key->AsObject(heap); | 3656 return key->AsObject(heap); |
3657 } | 3657 } |
3658 | 3658 |
3659 static const int kPrefixSize = 0; | 3659 static const int kPrefixSize = 0; |
3660 static const int kEntrySize = 2; | 3660 static const int kEntrySize = 2; |
3661 }; | 3661 }; |
3662 | 3662 |
3663 | 3663 |
3664 // MapCache. | 3664 // MapCache. |
3665 // | 3665 // |
3666 // Maps keys that are a fixed array of unique names to a map. | 3666 // Maps keys that are a fixed array of unique names to a map. |
3667 // Used for canonicalize maps for object literals. | 3667 // Used for canonicalize maps for object literals. |
3668 class MapCache FINAL : public HashTable<MapCacheShape, HashTableKey*> { | 3668 class MapCache V8_FINAL : public HashTable<MapCacheShape, HashTableKey*> { |
3669 public: | 3669 public: |
3670 // Find cached value for a name key, otherwise return null. | 3670 // Find cached value for a name key, otherwise return null. |
3671 Object* Lookup(FixedArray* key); | 3671 Object* Lookup(FixedArray* key); |
3672 MUST_USE_RESULT MaybeObject* Put(FixedArray* key, Map* value); | 3672 MUST_USE_RESULT MaybeObject* Put(FixedArray* key, Map* value); |
3673 static inline MapCache* cast(Object* obj); | 3673 static inline MapCache* cast(Object* obj); |
3674 | 3674 |
3675 private: | 3675 private: |
3676 DISALLOW_IMPLICIT_CONSTRUCTORS(MapCache); | 3676 DISALLOW_IMPLICIT_CONSTRUCTORS(MapCache); |
3677 }; | 3677 }; |
3678 | 3678 |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3785 uint32_t hash); | 3785 uint32_t hash); |
3786 | 3786 |
3787 // Generate new enumeration indices to avoid enumeration index overflow. | 3787 // Generate new enumeration indices to avoid enumeration index overflow. |
3788 MUST_USE_RESULT MaybeObject* GenerateNewEnumerationIndices(); | 3788 MUST_USE_RESULT MaybeObject* GenerateNewEnumerationIndices(); |
3789 static const int kMaxNumberKeyIndex = | 3789 static const int kMaxNumberKeyIndex = |
3790 HashTable<Shape, Key>::kPrefixStartIndex; | 3790 HashTable<Shape, Key>::kPrefixStartIndex; |
3791 static const int kNextEnumerationIndexIndex = kMaxNumberKeyIndex + 1; | 3791 static const int kNextEnumerationIndexIndex = kMaxNumberKeyIndex + 1; |
3792 }; | 3792 }; |
3793 | 3793 |
3794 | 3794 |
3795 class NameDictionaryShape FINAL : public BaseShape<Name*> { | 3795 class NameDictionaryShape V8_FINAL : public BaseShape<Name*> { |
3796 public: | 3796 public: |
3797 static inline bool IsMatch(Name* key, Object* other); | 3797 static inline bool IsMatch(Name* key, Object* other); |
3798 static inline uint32_t Hash(Name* key); | 3798 static inline uint32_t Hash(Name* key); |
3799 static inline uint32_t HashForObject(Name* key, Object* object); | 3799 static inline uint32_t HashForObject(Name* key, Object* object); |
3800 MUST_USE_RESULT static inline MaybeObject* AsObject(Heap* heap, | 3800 MUST_USE_RESULT static inline MaybeObject* AsObject(Heap* heap, |
3801 Name* key); | 3801 Name* key); |
3802 static const int kPrefixSize = 2; | 3802 static const int kPrefixSize = 2; |
3803 static const int kEntrySize = 3; | 3803 static const int kEntrySize = 3; |
3804 static const bool kIsEnumerable = true; | 3804 static const bool kIsEnumerable = true; |
3805 }; | 3805 }; |
3806 | 3806 |
3807 | 3807 |
3808 class NameDictionary FINAL : public Dictionary<NameDictionaryShape, Name*> { | 3808 class NameDictionary V8_FINAL : public Dictionary<NameDictionaryShape, Name*> { |
3809 public: | 3809 public: |
3810 static inline NameDictionary* cast(Object* obj) { | 3810 static inline NameDictionary* cast(Object* obj) { |
3811 ASSERT(obj->IsDictionary()); | 3811 ASSERT(obj->IsDictionary()); |
3812 return reinterpret_cast<NameDictionary*>(obj); | 3812 return reinterpret_cast<NameDictionary*>(obj); |
3813 } | 3813 } |
3814 | 3814 |
3815 // Copies enumerable keys to preallocated fixed array. | 3815 // Copies enumerable keys to preallocated fixed array. |
3816 FixedArray* CopyEnumKeysTo(FixedArray* storage); | 3816 FixedArray* CopyEnumKeysTo(FixedArray* storage); |
3817 static void DoGenerateNewEnumerationIndices( | 3817 static void DoGenerateNewEnumerationIndices( |
3818 Handle<NameDictionary> dictionary); | 3818 Handle<NameDictionary> dictionary); |
(...skipping 12 matching lines...) Expand all Loading... |
3831 class NumberDictionaryShape : public BaseShape<uint32_t> { | 3831 class NumberDictionaryShape : public BaseShape<uint32_t> { |
3832 public: | 3832 public: |
3833 static inline bool IsMatch(uint32_t key, Object* other); | 3833 static inline bool IsMatch(uint32_t key, Object* other); |
3834 MUST_USE_RESULT static inline MaybeObject* AsObject(Heap* heap, | 3834 MUST_USE_RESULT static inline MaybeObject* AsObject(Heap* heap, |
3835 uint32_t key); | 3835 uint32_t key); |
3836 static const int kEntrySize = 3; | 3836 static const int kEntrySize = 3; |
3837 static const bool kIsEnumerable = false; | 3837 static const bool kIsEnumerable = false; |
3838 }; | 3838 }; |
3839 | 3839 |
3840 | 3840 |
3841 class SeededNumberDictionaryShape FINAL : public NumberDictionaryShape { | 3841 class SeededNumberDictionaryShape V8_FINAL : public NumberDictionaryShape { |
3842 public: | 3842 public: |
3843 static const bool UsesSeed = true; | 3843 static const bool UsesSeed = true; |
3844 static const int kPrefixSize = 2; | 3844 static const int kPrefixSize = 2; |
3845 | 3845 |
3846 static inline uint32_t SeededHash(uint32_t key, uint32_t seed); | 3846 static inline uint32_t SeededHash(uint32_t key, uint32_t seed); |
3847 static inline uint32_t SeededHashForObject(uint32_t key, | 3847 static inline uint32_t SeededHashForObject(uint32_t key, |
3848 uint32_t seed, | 3848 uint32_t seed, |
3849 Object* object); | 3849 Object* object); |
3850 }; | 3850 }; |
3851 | 3851 |
3852 | 3852 |
3853 class UnseededNumberDictionaryShape FINAL : public NumberDictionaryShape { | 3853 class UnseededNumberDictionaryShape V8_FINAL : public NumberDictionaryShape { |
3854 public: | 3854 public: |
3855 static const int kPrefixSize = 0; | 3855 static const int kPrefixSize = 0; |
3856 | 3856 |
3857 static inline uint32_t Hash(uint32_t key); | 3857 static inline uint32_t Hash(uint32_t key); |
3858 static inline uint32_t HashForObject(uint32_t key, Object* object); | 3858 static inline uint32_t HashForObject(uint32_t key, Object* object); |
3859 }; | 3859 }; |
3860 | 3860 |
3861 | 3861 |
3862 class SeededNumberDictionary FINAL | 3862 class SeededNumberDictionary V8_FINAL |
3863 : public Dictionary<SeededNumberDictionaryShape, uint32_t> { | 3863 : public Dictionary<SeededNumberDictionaryShape, uint32_t> { |
3864 public: | 3864 public: |
3865 static SeededNumberDictionary* cast(Object* obj) { | 3865 static SeededNumberDictionary* cast(Object* obj) { |
3866 ASSERT(obj->IsDictionary()); | 3866 ASSERT(obj->IsDictionary()); |
3867 return reinterpret_cast<SeededNumberDictionary*>(obj); | 3867 return reinterpret_cast<SeededNumberDictionary*>(obj); |
3868 } | 3868 } |
3869 | 3869 |
3870 // Type specific at put (default NONE attributes is used when adding). | 3870 // Type specific at put (default NONE attributes is used when adding). |
3871 MUST_USE_RESULT MaybeObject* AtNumberPut(uint32_t key, Object* value); | 3871 MUST_USE_RESULT MaybeObject* AtNumberPut(uint32_t key, Object* value); |
3872 MUST_USE_RESULT MaybeObject* AddNumberEntry(uint32_t key, | 3872 MUST_USE_RESULT MaybeObject* AddNumberEntry(uint32_t key, |
(...skipping 27 matching lines...) Expand all Loading... |
3900 // requires_slow_elements returns false. | 3900 // requires_slow_elements returns false. |
3901 inline uint32_t max_number_key(); | 3901 inline uint32_t max_number_key(); |
3902 | 3902 |
3903 // Bit masks. | 3903 // Bit masks. |
3904 static const int kRequiresSlowElementsMask = 1; | 3904 static const int kRequiresSlowElementsMask = 1; |
3905 static const int kRequiresSlowElementsTagSize = 1; | 3905 static const int kRequiresSlowElementsTagSize = 1; |
3906 static const uint32_t kRequiresSlowElementsLimit = (1 << 29) - 1; | 3906 static const uint32_t kRequiresSlowElementsLimit = (1 << 29) - 1; |
3907 }; | 3907 }; |
3908 | 3908 |
3909 | 3909 |
3910 class UnseededNumberDictionary FINAL | 3910 class UnseededNumberDictionary V8_FINAL |
3911 : public Dictionary<UnseededNumberDictionaryShape, uint32_t> { | 3911 : public Dictionary<UnseededNumberDictionaryShape, uint32_t> { |
3912 public: | 3912 public: |
3913 static UnseededNumberDictionary* cast(Object* obj) { | 3913 static UnseededNumberDictionary* cast(Object* obj) { |
3914 ASSERT(obj->IsDictionary()); | 3914 ASSERT(obj->IsDictionary()); |
3915 return reinterpret_cast<UnseededNumberDictionary*>(obj); | 3915 return reinterpret_cast<UnseededNumberDictionary*>(obj); |
3916 } | 3916 } |
3917 | 3917 |
3918 // Type specific at put (default NONE attributes is used when adding). | 3918 // Type specific at put (default NONE attributes is used when adding). |
3919 MUST_USE_RESULT MaybeObject* AtNumberPut(uint32_t key, Object* value); | 3919 MUST_USE_RESULT MaybeObject* AtNumberPut(uint32_t key, Object* value); |
3920 MUST_USE_RESULT MaybeObject* AddNumberEntry(uint32_t key, Object* value); | 3920 MUST_USE_RESULT MaybeObject* AddNumberEntry(uint32_t key, Object* value); |
3921 | 3921 |
3922 // Set an existing entry or add a new one if needed. | 3922 // Set an existing entry or add a new one if needed. |
3923 // Return the updated dictionary. | 3923 // Return the updated dictionary. |
3924 MUST_USE_RESULT static Handle<UnseededNumberDictionary> Set( | 3924 MUST_USE_RESULT static Handle<UnseededNumberDictionary> Set( |
3925 Handle<UnseededNumberDictionary> dictionary, | 3925 Handle<UnseededNumberDictionary> dictionary, |
3926 uint32_t index, | 3926 uint32_t index, |
3927 Handle<Object> value); | 3927 Handle<Object> value); |
3928 | 3928 |
3929 MUST_USE_RESULT MaybeObject* Set(uint32_t key, Object* value); | 3929 MUST_USE_RESULT MaybeObject* Set(uint32_t key, Object* value); |
3930 }; | 3930 }; |
3931 | 3931 |
3932 | 3932 |
3933 template <int entrysize> | 3933 template <int entrysize> |
3934 class ObjectHashTableShape FINAL : public BaseShape<Object*> { | 3934 class ObjectHashTableShape V8_FINAL : public BaseShape<Object*> { |
3935 public: | 3935 public: |
3936 static inline bool IsMatch(Object* key, Object* other); | 3936 static inline bool IsMatch(Object* key, Object* other); |
3937 static inline uint32_t Hash(Object* key); | 3937 static inline uint32_t Hash(Object* key); |
3938 static inline uint32_t HashForObject(Object* key, Object* object); | 3938 static inline uint32_t HashForObject(Object* key, Object* object); |
3939 MUST_USE_RESULT static inline MaybeObject* AsObject(Heap* heap, | 3939 MUST_USE_RESULT static inline MaybeObject* AsObject(Heap* heap, |
3940 Object* key); | 3940 Object* key); |
3941 static const int kPrefixSize = 0; | 3941 static const int kPrefixSize = 0; |
3942 static const int kEntrySize = entrysize; | 3942 static const int kEntrySize = entrysize; |
3943 }; | 3943 }; |
3944 | 3944 |
3945 | 3945 |
3946 // ObjectHashSet holds keys that are arbitrary objects by using the identity | 3946 // ObjectHashSet holds keys that are arbitrary objects by using the identity |
3947 // hash of the key for hashing purposes. | 3947 // hash of the key for hashing purposes. |
3948 class ObjectHashSet FINAL : public HashTable<ObjectHashTableShape<1>, Object*> { | 3948 class ObjectHashSet V8_FINAL |
| 3949 : public HashTable<ObjectHashTableShape<1>, Object*> { |
3949 public: | 3950 public: |
3950 static inline ObjectHashSet* cast(Object* obj) { | 3951 static inline ObjectHashSet* cast(Object* obj) { |
3951 ASSERT(obj->IsHashTable()); | 3952 ASSERT(obj->IsHashTable()); |
3952 return reinterpret_cast<ObjectHashSet*>(obj); | 3953 return reinterpret_cast<ObjectHashSet*>(obj); |
3953 } | 3954 } |
3954 | 3955 |
3955 // Looks up whether the given key is part of this hash set. | 3956 // Looks up whether the given key is part of this hash set. |
3956 bool Contains(Object* key); | 3957 bool Contains(Object* key); |
3957 | 3958 |
3958 // Adds the given key to this hash set. | 3959 // Adds the given key to this hash set. |
3959 MUST_USE_RESULT MaybeObject* Add(Object* key); | 3960 MUST_USE_RESULT MaybeObject* Add(Object* key); |
3960 | 3961 |
3961 // Removes the given key from this hash set. | 3962 // Removes the given key from this hash set. |
3962 MUST_USE_RESULT MaybeObject* Remove(Object* key); | 3963 MUST_USE_RESULT MaybeObject* Remove(Object* key); |
3963 }; | 3964 }; |
3964 | 3965 |
3965 | 3966 |
3966 // ObjectHashTable maps keys that are arbitrary objects to object values by | 3967 // ObjectHashTable maps keys that are arbitrary objects to object values by |
3967 // using the identity hash of the key for hashing purposes. | 3968 // using the identity hash of the key for hashing purposes. |
3968 class ObjectHashTable FINAL | 3969 class ObjectHashTable V8_FINAL |
3969 : public HashTable<ObjectHashTableShape<2>, Object*> { | 3970 : public HashTable<ObjectHashTableShape<2>, Object*> { |
3970 public: | 3971 public: |
3971 static inline ObjectHashTable* cast(Object* obj) { | 3972 static inline ObjectHashTable* cast(Object* obj) { |
3972 ASSERT(obj->IsHashTable()); | 3973 ASSERT(obj->IsHashTable()); |
3973 return reinterpret_cast<ObjectHashTable*>(obj); | 3974 return reinterpret_cast<ObjectHashTable*>(obj); |
3974 } | 3975 } |
3975 | 3976 |
3976 // Looks up the value associated with the given key. The hole value is | 3977 // Looks up the value associated with the given key. The hole value is |
3977 // returned in case the key is not present. | 3978 // returned in case the key is not present. |
3978 Object* Lookup(Object* key); | 3979 Object* Lookup(Object* key); |
(...skipping 15 matching lines...) Expand all Loading... |
3994 }; | 3995 }; |
3995 | 3996 |
3996 | 3997 |
3997 // JSFunctionResultCache caches results of some JSFunction invocation. | 3998 // JSFunctionResultCache caches results of some JSFunction invocation. |
3998 // It is a fixed array with fixed structure: | 3999 // It is a fixed array with fixed structure: |
3999 // [0]: factory function | 4000 // [0]: factory function |
4000 // [1]: finger index | 4001 // [1]: finger index |
4001 // [2]: current cache size | 4002 // [2]: current cache size |
4002 // [3]: dummy field. | 4003 // [3]: dummy field. |
4003 // The rest of array are key/value pairs. | 4004 // The rest of array are key/value pairs. |
4004 class JSFunctionResultCache FINAL : public FixedArray { | 4005 class JSFunctionResultCache V8_FINAL : public FixedArray { |
4005 public: | 4006 public: |
4006 static const int kFactoryIndex = 0; | 4007 static const int kFactoryIndex = 0; |
4007 static const int kFingerIndex = kFactoryIndex + 1; | 4008 static const int kFingerIndex = kFactoryIndex + 1; |
4008 static const int kCacheSizeIndex = kFingerIndex + 1; | 4009 static const int kCacheSizeIndex = kFingerIndex + 1; |
4009 static const int kDummyIndex = kCacheSizeIndex + 1; | 4010 static const int kDummyIndex = kCacheSizeIndex + 1; |
4010 static const int kEntriesIndex = kDummyIndex + 1; | 4011 static const int kEntriesIndex = kDummyIndex + 1; |
4011 | 4012 |
4012 static const int kEntrySize = 2; // key + value | 4013 static const int kEntrySize = 2; // key + value |
4013 | 4014 |
4014 static const int kFactoryOffset = kHeaderSize; | 4015 static const int kFactoryOffset = kHeaderSize; |
(...skipping 15 matching lines...) Expand all Loading... |
4030 }; | 4031 }; |
4031 | 4032 |
4032 | 4033 |
4033 // ScopeInfo represents information about different scopes of a source | 4034 // ScopeInfo represents information about different scopes of a source |
4034 // program and the allocation of the scope's variables. Scope information | 4035 // program and the allocation of the scope's variables. Scope information |
4035 // is stored in a compressed form in ScopeInfo objects and is used | 4036 // is stored in a compressed form in ScopeInfo objects and is used |
4036 // at runtime (stack dumps, deoptimization, etc.). | 4037 // at runtime (stack dumps, deoptimization, etc.). |
4037 | 4038 |
4038 // This object provides quick access to scope info details for runtime | 4039 // This object provides quick access to scope info details for runtime |
4039 // routines. | 4040 // routines. |
4040 class ScopeInfo FINAL : public FixedArray { | 4041 class ScopeInfo V8_FINAL : public FixedArray { |
4041 public: | 4042 public: |
4042 static inline ScopeInfo* cast(Object* object); | 4043 static inline ScopeInfo* cast(Object* object); |
4043 | 4044 |
4044 // Return the type of this scope. | 4045 // Return the type of this scope. |
4045 ScopeType scope_type(); | 4046 ScopeType scope_type(); |
4046 | 4047 |
4047 // Does this scope call eval? | 4048 // Does this scope call eval? |
4048 bool CallsEval(); | 4049 bool CallsEval(); |
4049 | 4050 |
4050 // Return the language mode of this scope. | 4051 // Return the language mode of this scope. |
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4234 // BitFields representing the encoded information for context locals in the | 4235 // BitFields representing the encoded information for context locals in the |
4235 // ContextLocalInfoEntries part. | 4236 // ContextLocalInfoEntries part. |
4236 class ContextLocalMode: public BitField<VariableMode, 0, 3> {}; | 4237 class ContextLocalMode: public BitField<VariableMode, 0, 3> {}; |
4237 class ContextLocalInitFlag: public BitField<InitializationFlag, 3, 1> {}; | 4238 class ContextLocalInitFlag: public BitField<InitializationFlag, 3, 1> {}; |
4238 }; | 4239 }; |
4239 | 4240 |
4240 | 4241 |
4241 // The cache for maps used by normalized (dictionary mode) objects. | 4242 // The cache for maps used by normalized (dictionary mode) objects. |
4242 // Such maps do not have property descriptors, so a typical program | 4243 // Such maps do not have property descriptors, so a typical program |
4243 // needs very limited number of distinct normalized maps. | 4244 // needs very limited number of distinct normalized maps. |
4244 class NormalizedMapCache FINAL : public FixedArray { | 4245 class NormalizedMapCache V8_FINAL : public FixedArray { |
4245 public: | 4246 public: |
4246 static const int kEntries = 64; | 4247 static const int kEntries = 64; |
4247 | 4248 |
4248 MUST_USE_RESULT MaybeObject* Get(JSObject* object, | 4249 MUST_USE_RESULT MaybeObject* Get(JSObject* object, |
4249 PropertyNormalizationMode mode); | 4250 PropertyNormalizationMode mode); |
4250 | 4251 |
4251 void Clear(); | 4252 void Clear(); |
4252 | 4253 |
4253 // Casting | 4254 // Casting |
4254 static inline NormalizedMapCache* cast(Object* obj); | 4255 static inline NormalizedMapCache* cast(Object* obj); |
4255 | 4256 |
4256 DECLARE_VERIFIER(NormalizedMapCache) | 4257 DECLARE_VERIFIER(NormalizedMapCache) |
4257 }; | 4258 }; |
4258 | 4259 |
4259 | 4260 |
4260 // ByteArray represents fixed sized byte arrays. Used for the relocation info | 4261 // ByteArray represents fixed sized byte arrays. Used for the relocation info |
4261 // that is attached to code objects. | 4262 // that is attached to code objects. |
4262 class ByteArray FINAL : public FixedArrayBase { | 4263 class ByteArray V8_FINAL : public FixedArrayBase { |
4263 public: | 4264 public: |
4264 inline int Size() { return RoundUp(length() + kHeaderSize, kPointerSize); } | 4265 inline int Size() { return RoundUp(length() + kHeaderSize, kPointerSize); } |
4265 | 4266 |
4266 // Setter and getter. | 4267 // Setter and getter. |
4267 inline byte get(int index); | 4268 inline byte get(int index); |
4268 inline void set(int index, byte value); | 4269 inline void set(int index, byte value); |
4269 | 4270 |
4270 // Treat contents as an int array. | 4271 // Treat contents as an int array. |
4271 inline int get_int(int index); | 4272 inline int get_int(int index); |
4272 | 4273 |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4307 // Maximal length of a single ByteArray. | 4308 // Maximal length of a single ByteArray. |
4308 static const int kMaxLength = kMaxSize - kHeaderSize; | 4309 static const int kMaxLength = kMaxSize - kHeaderSize; |
4309 | 4310 |
4310 private: | 4311 private: |
4311 DISALLOW_IMPLICIT_CONSTRUCTORS(ByteArray); | 4312 DISALLOW_IMPLICIT_CONSTRUCTORS(ByteArray); |
4312 }; | 4313 }; |
4313 | 4314 |
4314 | 4315 |
4315 // FreeSpace represents fixed sized areas of the heap that are not currently in | 4316 // FreeSpace represents fixed sized areas of the heap that are not currently in |
4316 // use. Used by the heap and GC. | 4317 // use. Used by the heap and GC. |
4317 class FreeSpace FINAL : public HeapObject { | 4318 class FreeSpace V8_FINAL : public HeapObject { |
4318 public: | 4319 public: |
4319 // [size]: size of the free space including the header. | 4320 // [size]: size of the free space including the header. |
4320 inline int size(); | 4321 inline int size(); |
4321 inline void set_size(int value); | 4322 inline void set_size(int value); |
4322 | 4323 |
4323 inline int Size() { return size(); } | 4324 inline int Size() { return size(); } |
4324 | 4325 |
4325 // Casting. | 4326 // Casting. |
4326 static inline FreeSpace* cast(Object* obj); | 4327 static inline FreeSpace* cast(Object* obj); |
4327 | 4328 |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4378 | 4379 |
4379 | 4380 |
4380 // A ExternalPixelArray represents a fixed-size byte array with special | 4381 // A ExternalPixelArray represents a fixed-size byte array with special |
4381 // semantics used for implementing the CanvasPixelArray object. Please see the | 4382 // semantics used for implementing the CanvasPixelArray object. Please see the |
4382 // specification at: | 4383 // specification at: |
4383 | 4384 |
4384 // http://www.whatwg.org/specs/web-apps/current-work/ | 4385 // http://www.whatwg.org/specs/web-apps/current-work/ |
4385 // multipage/the-canvas-element.html#canvaspixelarray | 4386 // multipage/the-canvas-element.html#canvaspixelarray |
4386 // In particular, write access clamps the value written to 0 or 255 if the | 4387 // In particular, write access clamps the value written to 0 or 255 if the |
4387 // value written is outside this range. | 4388 // value written is outside this range. |
4388 class ExternalPixelArray FINAL : public ExternalArray { | 4389 class ExternalPixelArray V8_FINAL : public ExternalArray { |
4389 public: | 4390 public: |
4390 inline uint8_t* external_pixel_pointer(); | 4391 inline uint8_t* external_pixel_pointer(); |
4391 | 4392 |
4392 // Setter and getter. | 4393 // Setter and getter. |
4393 inline uint8_t get_scalar(int index); | 4394 inline uint8_t get_scalar(int index); |
4394 MUST_USE_RESULT inline MaybeObject* get(int index); | 4395 MUST_USE_RESULT inline MaybeObject* get(int index); |
4395 inline void set(int index, uint8_t value); | 4396 inline void set(int index, uint8_t value); |
4396 | 4397 |
4397 // This accessor applies the correct conversion from Smi, HeapNumber and | 4398 // This accessor applies the correct conversion from Smi, HeapNumber and |
4398 // undefined and clamps the converted value between 0 and 255. | 4399 // undefined and clamps the converted value between 0 and 255. |
4399 Object* SetValue(uint32_t index, Object* value); | 4400 Object* SetValue(uint32_t index, Object* value); |
4400 | 4401 |
4401 // Casting. | 4402 // Casting. |
4402 static inline ExternalPixelArray* cast(Object* obj); | 4403 static inline ExternalPixelArray* cast(Object* obj); |
4403 | 4404 |
4404 // Dispatched behavior. | 4405 // Dispatched behavior. |
4405 DECLARE_PRINTER(ExternalPixelArray) | 4406 DECLARE_PRINTER(ExternalPixelArray) |
4406 DECLARE_VERIFIER(ExternalPixelArray) | 4407 DECLARE_VERIFIER(ExternalPixelArray) |
4407 | 4408 |
4408 private: | 4409 private: |
4409 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalPixelArray); | 4410 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalPixelArray); |
4410 }; | 4411 }; |
4411 | 4412 |
4412 | 4413 |
4413 class ExternalByteArray FINAL : public ExternalArray { | 4414 class ExternalByteArray V8_FINAL : public ExternalArray { |
4414 public: | 4415 public: |
4415 // Setter and getter. | 4416 // Setter and getter. |
4416 inline int8_t get_scalar(int index); | 4417 inline int8_t get_scalar(int index); |
4417 MUST_USE_RESULT inline MaybeObject* get(int index); | 4418 MUST_USE_RESULT inline MaybeObject* get(int index); |
4418 inline void set(int index, int8_t value); | 4419 inline void set(int index, int8_t value); |
4419 | 4420 |
4420 // This accessor applies the correct conversion from Smi, HeapNumber | 4421 // This accessor applies the correct conversion from Smi, HeapNumber |
4421 // and undefined. | 4422 // and undefined. |
4422 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); | 4423 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); |
4423 | 4424 |
4424 // Casting. | 4425 // Casting. |
4425 static inline ExternalByteArray* cast(Object* obj); | 4426 static inline ExternalByteArray* cast(Object* obj); |
4426 | 4427 |
4427 // Dispatched behavior. | 4428 // Dispatched behavior. |
4428 DECLARE_PRINTER(ExternalByteArray) | 4429 DECLARE_PRINTER(ExternalByteArray) |
4429 DECLARE_VERIFIER(ExternalByteArray) | 4430 DECLARE_VERIFIER(ExternalByteArray) |
4430 | 4431 |
4431 private: | 4432 private: |
4432 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalByteArray); | 4433 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalByteArray); |
4433 }; | 4434 }; |
4434 | 4435 |
4435 | 4436 |
4436 class ExternalUnsignedByteArray FINAL : public ExternalArray { | 4437 class ExternalUnsignedByteArray V8_FINAL : public ExternalArray { |
4437 public: | 4438 public: |
4438 // Setter and getter. | 4439 // Setter and getter. |
4439 inline uint8_t get_scalar(int index); | 4440 inline uint8_t get_scalar(int index); |
4440 MUST_USE_RESULT inline MaybeObject* get(int index); | 4441 MUST_USE_RESULT inline MaybeObject* get(int index); |
4441 inline void set(int index, uint8_t value); | 4442 inline void set(int index, uint8_t value); |
4442 | 4443 |
4443 // This accessor applies the correct conversion from Smi, HeapNumber | 4444 // This accessor applies the correct conversion from Smi, HeapNumber |
4444 // and undefined. | 4445 // and undefined. |
4445 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); | 4446 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); |
4446 | 4447 |
4447 // Casting. | 4448 // Casting. |
4448 static inline ExternalUnsignedByteArray* cast(Object* obj); | 4449 static inline ExternalUnsignedByteArray* cast(Object* obj); |
4449 | 4450 |
4450 // Dispatched behavior. | 4451 // Dispatched behavior. |
4451 DECLARE_PRINTER(ExternalUnsignedByteArray) | 4452 DECLARE_PRINTER(ExternalUnsignedByteArray) |
4452 DECLARE_VERIFIER(ExternalUnsignedByteArray) | 4453 DECLARE_VERIFIER(ExternalUnsignedByteArray) |
4453 | 4454 |
4454 private: | 4455 private: |
4455 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalUnsignedByteArray); | 4456 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalUnsignedByteArray); |
4456 }; | 4457 }; |
4457 | 4458 |
4458 | 4459 |
4459 class ExternalShortArray FINAL : public ExternalArray { | 4460 class ExternalShortArray V8_FINAL : public ExternalArray { |
4460 public: | 4461 public: |
4461 // Setter and getter. | 4462 // Setter and getter. |
4462 inline int16_t get_scalar(int index); | 4463 inline int16_t get_scalar(int index); |
4463 MUST_USE_RESULT inline MaybeObject* get(int index); | 4464 MUST_USE_RESULT inline MaybeObject* get(int index); |
4464 inline void set(int index, int16_t value); | 4465 inline void set(int index, int16_t value); |
4465 | 4466 |
4466 // This accessor applies the correct conversion from Smi, HeapNumber | 4467 // This accessor applies the correct conversion from Smi, HeapNumber |
4467 // and undefined. | 4468 // and undefined. |
4468 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); | 4469 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); |
4469 | 4470 |
4470 // Casting. | 4471 // Casting. |
4471 static inline ExternalShortArray* cast(Object* obj); | 4472 static inline ExternalShortArray* cast(Object* obj); |
4472 | 4473 |
4473 // Dispatched behavior. | 4474 // Dispatched behavior. |
4474 DECLARE_PRINTER(ExternalShortArray) | 4475 DECLARE_PRINTER(ExternalShortArray) |
4475 DECLARE_VERIFIER(ExternalShortArray) | 4476 DECLARE_VERIFIER(ExternalShortArray) |
4476 | 4477 |
4477 private: | 4478 private: |
4478 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalShortArray); | 4479 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalShortArray); |
4479 }; | 4480 }; |
4480 | 4481 |
4481 | 4482 |
4482 class ExternalUnsignedShortArray FINAL : public ExternalArray { | 4483 class ExternalUnsignedShortArray V8_FINAL : public ExternalArray { |
4483 public: | 4484 public: |
4484 // Setter and getter. | 4485 // Setter and getter. |
4485 inline uint16_t get_scalar(int index); | 4486 inline uint16_t get_scalar(int index); |
4486 MUST_USE_RESULT inline MaybeObject* get(int index); | 4487 MUST_USE_RESULT inline MaybeObject* get(int index); |
4487 inline void set(int index, uint16_t value); | 4488 inline void set(int index, uint16_t value); |
4488 | 4489 |
4489 // This accessor applies the correct conversion from Smi, HeapNumber | 4490 // This accessor applies the correct conversion from Smi, HeapNumber |
4490 // and undefined. | 4491 // and undefined. |
4491 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); | 4492 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); |
4492 | 4493 |
4493 // Casting. | 4494 // Casting. |
4494 static inline ExternalUnsignedShortArray* cast(Object* obj); | 4495 static inline ExternalUnsignedShortArray* cast(Object* obj); |
4495 | 4496 |
4496 // Dispatched behavior. | 4497 // Dispatched behavior. |
4497 DECLARE_PRINTER(ExternalUnsignedShortArray) | 4498 DECLARE_PRINTER(ExternalUnsignedShortArray) |
4498 DECLARE_VERIFIER(ExternalUnsignedShortArray) | 4499 DECLARE_VERIFIER(ExternalUnsignedShortArray) |
4499 | 4500 |
4500 private: | 4501 private: |
4501 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalUnsignedShortArray); | 4502 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalUnsignedShortArray); |
4502 }; | 4503 }; |
4503 | 4504 |
4504 | 4505 |
4505 class ExternalIntArray FINAL : public ExternalArray { | 4506 class ExternalIntArray V8_FINAL : public ExternalArray { |
4506 public: | 4507 public: |
4507 // Setter and getter. | 4508 // Setter and getter. |
4508 inline int32_t get_scalar(int index); | 4509 inline int32_t get_scalar(int index); |
4509 MUST_USE_RESULT inline MaybeObject* get(int index); | 4510 MUST_USE_RESULT inline MaybeObject* get(int index); |
4510 inline void set(int index, int32_t value); | 4511 inline void set(int index, int32_t value); |
4511 | 4512 |
4512 // This accessor applies the correct conversion from Smi, HeapNumber | 4513 // This accessor applies the correct conversion from Smi, HeapNumber |
4513 // and undefined. | 4514 // and undefined. |
4514 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); | 4515 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); |
4515 | 4516 |
4516 // Casting. | 4517 // Casting. |
4517 static inline ExternalIntArray* cast(Object* obj); | 4518 static inline ExternalIntArray* cast(Object* obj); |
4518 | 4519 |
4519 // Dispatched behavior. | 4520 // Dispatched behavior. |
4520 DECLARE_PRINTER(ExternalIntArray) | 4521 DECLARE_PRINTER(ExternalIntArray) |
4521 DECLARE_VERIFIER(ExternalIntArray) | 4522 DECLARE_VERIFIER(ExternalIntArray) |
4522 | 4523 |
4523 private: | 4524 private: |
4524 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalIntArray); | 4525 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalIntArray); |
4525 }; | 4526 }; |
4526 | 4527 |
4527 | 4528 |
4528 class ExternalUnsignedIntArray FINAL : public ExternalArray { | 4529 class ExternalUnsignedIntArray V8_FINAL : public ExternalArray { |
4529 public: | 4530 public: |
4530 // Setter and getter. | 4531 // Setter and getter. |
4531 inline uint32_t get_scalar(int index); | 4532 inline uint32_t get_scalar(int index); |
4532 MUST_USE_RESULT inline MaybeObject* get(int index); | 4533 MUST_USE_RESULT inline MaybeObject* get(int index); |
4533 inline void set(int index, uint32_t value); | 4534 inline void set(int index, uint32_t value); |
4534 | 4535 |
4535 // This accessor applies the correct conversion from Smi, HeapNumber | 4536 // This accessor applies the correct conversion from Smi, HeapNumber |
4536 // and undefined. | 4537 // and undefined. |
4537 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); | 4538 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); |
4538 | 4539 |
4539 // Casting. | 4540 // Casting. |
4540 static inline ExternalUnsignedIntArray* cast(Object* obj); | 4541 static inline ExternalUnsignedIntArray* cast(Object* obj); |
4541 | 4542 |
4542 // Dispatched behavior. | 4543 // Dispatched behavior. |
4543 DECLARE_PRINTER(ExternalUnsignedIntArray) | 4544 DECLARE_PRINTER(ExternalUnsignedIntArray) |
4544 DECLARE_VERIFIER(ExternalUnsignedIntArray) | 4545 DECLARE_VERIFIER(ExternalUnsignedIntArray) |
4545 | 4546 |
4546 private: | 4547 private: |
4547 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalUnsignedIntArray); | 4548 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalUnsignedIntArray); |
4548 }; | 4549 }; |
4549 | 4550 |
4550 | 4551 |
4551 class ExternalFloatArray FINAL : public ExternalArray { | 4552 class ExternalFloatArray V8_FINAL : public ExternalArray { |
4552 public: | 4553 public: |
4553 // Setter and getter. | 4554 // Setter and getter. |
4554 inline float get_scalar(int index); | 4555 inline float get_scalar(int index); |
4555 MUST_USE_RESULT inline MaybeObject* get(int index); | 4556 MUST_USE_RESULT inline MaybeObject* get(int index); |
4556 inline void set(int index, float value); | 4557 inline void set(int index, float value); |
4557 | 4558 |
4558 // This accessor applies the correct conversion from Smi, HeapNumber | 4559 // This accessor applies the correct conversion from Smi, HeapNumber |
4559 // and undefined. | 4560 // and undefined. |
4560 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); | 4561 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); |
4561 | 4562 |
4562 // Casting. | 4563 // Casting. |
4563 static inline ExternalFloatArray* cast(Object* obj); | 4564 static inline ExternalFloatArray* cast(Object* obj); |
4564 | 4565 |
4565 // Dispatched behavior. | 4566 // Dispatched behavior. |
4566 DECLARE_PRINTER(ExternalFloatArray) | 4567 DECLARE_PRINTER(ExternalFloatArray) |
4567 DECLARE_VERIFIER(ExternalFloatArray) | 4568 DECLARE_VERIFIER(ExternalFloatArray) |
4568 | 4569 |
4569 private: | 4570 private: |
4570 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalFloatArray); | 4571 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalFloatArray); |
4571 }; | 4572 }; |
4572 | 4573 |
4573 | 4574 |
4574 class ExternalDoubleArray FINAL : public ExternalArray { | 4575 class ExternalDoubleArray V8_FINAL : public ExternalArray { |
4575 public: | 4576 public: |
4576 // Setter and getter. | 4577 // Setter and getter. |
4577 inline double get_scalar(int index); | 4578 inline double get_scalar(int index); |
4578 MUST_USE_RESULT inline MaybeObject* get(int index); | 4579 MUST_USE_RESULT inline MaybeObject* get(int index); |
4579 inline void set(int index, double value); | 4580 inline void set(int index, double value); |
4580 | 4581 |
4581 // This accessor applies the correct conversion from Smi, HeapNumber | 4582 // This accessor applies the correct conversion from Smi, HeapNumber |
4582 // and undefined. | 4583 // and undefined. |
4583 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); | 4584 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); |
4584 | 4585 |
4585 // Casting. | 4586 // Casting. |
4586 static inline ExternalDoubleArray* cast(Object* obj); | 4587 static inline ExternalDoubleArray* cast(Object* obj); |
4587 | 4588 |
4588 // Dispatched behavior. | 4589 // Dispatched behavior. |
4589 DECLARE_PRINTER(ExternalDoubleArray) | 4590 DECLARE_PRINTER(ExternalDoubleArray) |
4590 DECLARE_VERIFIER(ExternalDoubleArray) | 4591 DECLARE_VERIFIER(ExternalDoubleArray) |
4591 | 4592 |
4592 private: | 4593 private: |
4593 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalDoubleArray); | 4594 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalDoubleArray); |
4594 }; | 4595 }; |
4595 | 4596 |
4596 | 4597 |
4597 // DeoptimizationInputData is a fixed array used to hold the deoptimization | 4598 // DeoptimizationInputData is a fixed array used to hold the deoptimization |
4598 // data for code generated by the Hydrogen/Lithium compiler. It also | 4599 // data for code generated by the Hydrogen/Lithium compiler. It also |
4599 // contains information about functions that were inlined. If N different | 4600 // contains information about functions that were inlined. If N different |
4600 // functions were inlined then first N elements of the literal array will | 4601 // functions were inlined then first N elements of the literal array will |
4601 // contain these functions. | 4602 // contain these functions. |
4602 // | 4603 // |
4603 // It can be empty. | 4604 // It can be empty. |
4604 class DeoptimizationInputData FINAL : public FixedArray { | 4605 class DeoptimizationInputData V8_FINAL : public FixedArray { |
4605 public: | 4606 public: |
4606 // Layout description. Indices in the array. | 4607 // Layout description. Indices in the array. |
4607 static const int kTranslationByteArrayIndex = 0; | 4608 static const int kTranslationByteArrayIndex = 0; |
4608 static const int kInlinedFunctionCountIndex = 1; | 4609 static const int kInlinedFunctionCountIndex = 1; |
4609 static const int kLiteralArrayIndex = 2; | 4610 static const int kLiteralArrayIndex = 2; |
4610 static const int kOsrAstIdIndex = 3; | 4611 static const int kOsrAstIdIndex = 3; |
4611 static const int kOsrPcOffsetIndex = 4; | 4612 static const int kOsrPcOffsetIndex = 4; |
4612 static const int kFirstDeoptEntryIndex = 5; | 4613 static const int kFirstDeoptEntryIndex = 5; |
4613 | 4614 |
4614 // Offsets of deopt entry elements relative to the start of the entry. | 4615 // Offsets of deopt entry elements relative to the start of the entry. |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4683 return IndexForEntry(entry_count); | 4684 return IndexForEntry(entry_count); |
4684 } | 4685 } |
4685 }; | 4686 }; |
4686 | 4687 |
4687 | 4688 |
4688 // DeoptimizationOutputData is a fixed array used to hold the deoptimization | 4689 // DeoptimizationOutputData is a fixed array used to hold the deoptimization |
4689 // data for code generated by the full compiler. | 4690 // data for code generated by the full compiler. |
4690 // The format of the these objects is | 4691 // The format of the these objects is |
4691 // [i * 2]: Ast ID for ith deoptimization. | 4692 // [i * 2]: Ast ID for ith deoptimization. |
4692 // [i * 2 + 1]: PC and state of ith deoptimization | 4693 // [i * 2 + 1]: PC and state of ith deoptimization |
4693 class DeoptimizationOutputData FINAL : public FixedArray { | 4694 class DeoptimizationOutputData V8_FINAL : public FixedArray { |
4694 public: | 4695 public: |
4695 int DeoptPoints() { return length() / 2; } | 4696 int DeoptPoints() { return length() / 2; } |
4696 | 4697 |
4697 BailoutId AstId(int index) { | 4698 BailoutId AstId(int index) { |
4698 return BailoutId(Smi::cast(get(index * 2))->value()); | 4699 return BailoutId(Smi::cast(get(index * 2))->value()); |
4699 } | 4700 } |
4700 | 4701 |
4701 void SetAstId(int index, BailoutId id) { | 4702 void SetAstId(int index, BailoutId id) { |
4702 set(index * 2, Smi::FromInt(id.ToInt())); | 4703 set(index * 2, Smi::FromInt(id.ToInt())); |
4703 } | 4704 } |
(...skipping 20 matching lines...) Expand all Loading... |
4724 | 4725 |
4725 // Forward declaration. | 4726 // Forward declaration. |
4726 class Cell; | 4727 class Cell; |
4727 class PropertyCell; | 4728 class PropertyCell; |
4728 | 4729 |
4729 // TypeFeedbackCells is a fixed array used to hold the association between | 4730 // TypeFeedbackCells is a fixed array used to hold the association between |
4730 // cache cells and AST ids for code generated by the full compiler. | 4731 // cache cells and AST ids for code generated by the full compiler. |
4731 // The format of the these objects is | 4732 // The format of the these objects is |
4732 // [i * 2]: Global property cell of ith cache cell. | 4733 // [i * 2]: Global property cell of ith cache cell. |
4733 // [i * 2 + 1]: Ast ID for ith cache cell. | 4734 // [i * 2 + 1]: Ast ID for ith cache cell. |
4734 class TypeFeedbackCells FINAL : public FixedArray { | 4735 class TypeFeedbackCells V8_FINAL : public FixedArray { |
4735 public: | 4736 public: |
4736 int CellCount() { return length() / 2; } | 4737 int CellCount() { return length() / 2; } |
4737 static int LengthOfFixedArray(int cell_count) { return cell_count * 2; } | 4738 static int LengthOfFixedArray(int cell_count) { return cell_count * 2; } |
4738 | 4739 |
4739 // Accessors for AST ids associated with cache values. | 4740 // Accessors for AST ids associated with cache values. |
4740 inline TypeFeedbackId AstId(int index); | 4741 inline TypeFeedbackId AstId(int index); |
4741 inline void SetAstId(int index, TypeFeedbackId id); | 4742 inline void SetAstId(int index, TypeFeedbackId id); |
4742 | 4743 |
4743 // Accessors for global property cells holding the cache values. | 4744 // Accessors for global property cells holding the cache values. |
4744 inline Cell* GetCell(int index); | 4745 inline Cell* GetCell(int index); |
(...skipping 20 matching lines...) Expand all Loading... |
4765 static const int kForInFastCaseMarker = 0; | 4766 static const int kForInFastCaseMarker = 0; |
4766 static const int kForInSlowCaseMarker = 1; | 4767 static const int kForInSlowCaseMarker = 1; |
4767 }; | 4768 }; |
4768 | 4769 |
4769 | 4770 |
4770 // Forward declaration. | 4771 // Forward declaration. |
4771 class SafepointEntry; | 4772 class SafepointEntry; |
4772 class TypeFeedbackInfo; | 4773 class TypeFeedbackInfo; |
4773 | 4774 |
4774 // Code describes objects with on-the-fly generated machine code. | 4775 // Code describes objects with on-the-fly generated machine code. |
4775 class Code FINAL : public HeapObject { | 4776 class Code V8_FINAL : public HeapObject { |
4776 public: | 4777 public: |
4777 // Opaque data type for encapsulating code flags like kind, inline | 4778 // Opaque data type for encapsulating code flags like kind, inline |
4778 // cache state, and arguments count. | 4779 // cache state, and arguments count. |
4779 typedef uint32_t Flags; | 4780 typedef uint32_t Flags; |
4780 | 4781 |
4781 #define NON_IC_KIND_LIST(V) \ | 4782 #define NON_IC_KIND_LIST(V) \ |
4782 V(FUNCTION) \ | 4783 V(FUNCTION) \ |
4783 V(OPTIMIZED_FUNCTION) \ | 4784 V(OPTIMIZED_FUNCTION) \ |
4784 V(STUB) \ | 4785 V(STUB) \ |
4785 V(BUILTIN) \ | 4786 V(BUILTIN) \ |
(...skipping 550 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5336 // The first n elements are Smis, each of them specifies the number of codes | 5337 // The first n elements are Smis, each of them specifies the number of codes |
5337 // in the corresponding group. The subsequent elements contain grouped code | 5338 // in the corresponding group. The subsequent elements contain grouped code |
5338 // objects. The suffix of the array can be filled with the undefined value if | 5339 // objects. The suffix of the array can be filled with the undefined value if |
5339 // the number of codes is less than the length of the array. The order of the | 5340 // the number of codes is less than the length of the array. The order of the |
5340 // code objects within a group is not preserved. | 5341 // code objects within a group is not preserved. |
5341 // | 5342 // |
5342 // All code indexes used in the class are counted starting from the first | 5343 // All code indexes used in the class are counted starting from the first |
5343 // code object of the first group. In other words, code index 0 corresponds | 5344 // code object of the first group. In other words, code index 0 corresponds |
5344 // to array index n = kCodesStartIndex. | 5345 // to array index n = kCodesStartIndex. |
5345 | 5346 |
5346 class DependentCode FINAL : public FixedArray { | 5347 class DependentCode V8_FINAL : public FixedArray { |
5347 public: | 5348 public: |
5348 enum DependencyGroup { | 5349 enum DependencyGroup { |
5349 // Group of code that weakly embed this map and depend on being | 5350 // Group of code that weakly embed this map and depend on being |
5350 // deoptimized when the map is garbage collected. | 5351 // deoptimized when the map is garbage collected. |
5351 kWeaklyEmbeddedGroup, | 5352 kWeaklyEmbeddedGroup, |
5352 // Group of code that embed a transition to this map, and depend on being | 5353 // Group of code that embed a transition to this map, and depend on being |
5353 // deoptimized when the transition is replaced by a new version. | 5354 // deoptimized when the transition is replaced by a new version. |
5354 kTransitionGroup, | 5355 kTransitionGroup, |
5355 // Group of code that omit run-time prototype checks for prototypes | 5356 // Group of code that omit run-time prototype checks for prototypes |
5356 // described by this map. The group is deoptimized whenever an object | 5357 // described by this map. The group is deoptimized whenever an object |
5357 // described by this map changes shape (and transitions to a new map), | 5358 // described by this map changes shape (and transitions to a new map), |
5358 // possibly invalidating the assumptions embedded in the code. | 5359 // possibly invalidating the assumptions embedded in the code. |
5359 kPrototypeCheckGroup, | 5360 kPrototypeCheckGroup, |
5360 // Group of code that depends on elements not being added to objects with | 5361 // Group of code that depends on elements not being added to objects with |
5361 // this map. | 5362 // this map. |
5362 kElementsCantBeAddedGroup, | 5363 kElementsCantBeAddedGroup, |
5363 // Group of code that depends on global property values in property cells | 5364 // Group of code that depends on global property values in property cells |
5364 // not being changed. | 5365 // not being changed. |
5365 kPropertyCellChangedGroup, | 5366 kPropertyCellChangedGroup, |
5366 kGroupCount = kPropertyCellChangedGroup + 1 | 5367 kGroupCount = kPropertyCellChangedGroup + 1 |
5367 }; | 5368 }; |
5368 | 5369 |
5369 // Array for holding the index of the first code object of each group. | 5370 // Array for holding the index of the first code object of each group. |
5370 // The last element stores the total number of code objects. | 5371 // The last element stores the total number of code objects. |
5371 class GroupStartIndexes FINAL { | 5372 class GroupStartIndexes V8_FINAL { |
5372 public: | 5373 public: |
5373 explicit GroupStartIndexes(DependentCode* entries); | 5374 explicit GroupStartIndexes(DependentCode* entries); |
5374 void Recompute(DependentCode* entries); | 5375 void Recompute(DependentCode* entries); |
5375 int at(int i) { return start_indexes_[i]; } | 5376 int at(int i) { return start_indexes_[i]; } |
5376 int number_of_entries() { return start_indexes_[kGroupCount]; } | 5377 int number_of_entries() { return start_indexes_[kGroupCount]; } |
5377 private: | 5378 private: |
5378 int start_indexes_[kGroupCount + 1]; | 5379 int start_indexes_[kGroupCount + 1]; |
5379 }; | 5380 }; |
5380 | 5381 |
5381 bool Contains(DependencyGroup group, Code* code); | 5382 bool Contains(DependencyGroup group, Code* code); |
(...skipping 685 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6067 // It doesn't carry much functionality but allows struct classes to be | 6068 // It doesn't carry much functionality but allows struct classes to be |
6068 // identified in the type system. | 6069 // identified in the type system. |
6069 class Struct: public HeapObject { | 6070 class Struct: public HeapObject { |
6070 public: | 6071 public: |
6071 inline void InitializeBody(int object_size); | 6072 inline void InitializeBody(int object_size); |
6072 static inline Struct* cast(Object* that); | 6073 static inline Struct* cast(Object* that); |
6073 }; | 6074 }; |
6074 | 6075 |
6075 | 6076 |
6076 // A simple one-element struct, useful where smis need to be boxed. | 6077 // A simple one-element struct, useful where smis need to be boxed. |
6077 class Box FINAL : public Struct { | 6078 class Box V8_FINAL : public Struct { |
6078 public: | 6079 public: |
6079 // [value]: the boxed contents. | 6080 // [value]: the boxed contents. |
6080 DECL_ACCESSORS(value, Object) | 6081 DECL_ACCESSORS(value, Object) |
6081 | 6082 |
6082 static inline Box* cast(Object* obj); | 6083 static inline Box* cast(Object* obj); |
6083 | 6084 |
6084 // Dispatched behavior. | 6085 // Dispatched behavior. |
6085 DECLARE_PRINTER(Box) | 6086 DECLARE_PRINTER(Box) |
6086 DECLARE_VERIFIER(Box) | 6087 DECLARE_VERIFIER(Box) |
6087 | 6088 |
6088 static const int kValueOffset = HeapObject::kHeaderSize; | 6089 static const int kValueOffset = HeapObject::kHeaderSize; |
6089 static const int kSize = kValueOffset + kPointerSize; | 6090 static const int kSize = kValueOffset + kPointerSize; |
6090 | 6091 |
6091 private: | 6092 private: |
6092 DISALLOW_IMPLICIT_CONSTRUCTORS(Box); | 6093 DISALLOW_IMPLICIT_CONSTRUCTORS(Box); |
6093 }; | 6094 }; |
6094 | 6095 |
6095 | 6096 |
6096 // Script describes a script which has been added to the VM. | 6097 // Script describes a script which has been added to the VM. |
6097 class Script FINAL : public Struct { | 6098 class Script V8_FINAL : public Struct { |
6098 public: | 6099 public: |
6099 // Script types. | 6100 // Script types. |
6100 enum Type { | 6101 enum Type { |
6101 TYPE_NATIVE = 0, | 6102 TYPE_NATIVE = 0, |
6102 TYPE_EXTENSION = 1, | 6103 TYPE_EXTENSION = 1, |
6103 TYPE_NORMAL = 2 | 6104 TYPE_NORMAL = 2 |
6104 }; | 6105 }; |
6105 | 6106 |
6106 // Script compilation types. | 6107 // Script compilation types. |
6107 enum CompilationType { | 6108 enum CompilationType { |
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6256 #undef DECLARE_FUNCTION_ID | 6257 #undef DECLARE_FUNCTION_ID |
6257 // Fake id for a special case of Math.pow. Note, it continues the | 6258 // Fake id for a special case of Math.pow. Note, it continues the |
6258 // list of math functions. | 6259 // list of math functions. |
6259 kMathPowHalf, | 6260 kMathPowHalf, |
6260 kFirstMathFunctionId = kMathFloor | 6261 kFirstMathFunctionId = kMathFloor |
6261 }; | 6262 }; |
6262 | 6263 |
6263 | 6264 |
6264 // SharedFunctionInfo describes the JSFunction information that can be | 6265 // SharedFunctionInfo describes the JSFunction information that can be |
6265 // shared by multiple instances of the function. | 6266 // shared by multiple instances of the function. |
6266 class SharedFunctionInfo FINAL : public HeapObject { | 6267 class SharedFunctionInfo V8_FINAL : public HeapObject { |
6267 public: | 6268 public: |
6268 // [name]: Function name. | 6269 // [name]: Function name. |
6269 DECL_ACCESSORS(name, Object) | 6270 DECL_ACCESSORS(name, Object) |
6270 | 6271 |
6271 // [code]: Function code. | 6272 // [code]: Function code. |
6272 DECL_ACCESSORS(code, Code) | 6273 DECL_ACCESSORS(code, Code) |
6273 inline void ReplaceCode(Code* code); | 6274 inline void ReplaceCode(Code* code); |
6274 | 6275 |
6275 // [optimized_code_map]: Map from native context to optimized code | 6276 // [optimized_code_map]: Map from native context to optimized code |
6276 // and a shared literals array or Smi(0) if none. | 6277 // and a shared literals array or Smi(0) if none. |
(...skipping 558 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6835 ((kNative + kCompilerHintsSmiTagSize) / kBitsPerByte); | 6836 ((kNative + kCompilerHintsSmiTagSize) / kBitsPerByte); |
6836 #else | 6837 #else |
6837 #error Unknown byte ordering | 6838 #error Unknown byte ordering |
6838 #endif | 6839 #endif |
6839 | 6840 |
6840 private: | 6841 private: |
6841 DISALLOW_IMPLICIT_CONSTRUCTORS(SharedFunctionInfo); | 6842 DISALLOW_IMPLICIT_CONSTRUCTORS(SharedFunctionInfo); |
6842 }; | 6843 }; |
6843 | 6844 |
6844 | 6845 |
6845 class JSGeneratorObject FINAL : public JSObject { | 6846 class JSGeneratorObject V8_FINAL : public JSObject { |
6846 public: | 6847 public: |
6847 // [function]: The function corresponding to this generator object. | 6848 // [function]: The function corresponding to this generator object. |
6848 DECL_ACCESSORS(function, JSFunction) | 6849 DECL_ACCESSORS(function, JSFunction) |
6849 | 6850 |
6850 // [context]: The context of the suspended computation. | 6851 // [context]: The context of the suspended computation. |
6851 DECL_ACCESSORS(context, Context) | 6852 DECL_ACCESSORS(context, Context) |
6852 | 6853 |
6853 // [receiver]: The receiver of the suspended computation. | 6854 // [receiver]: The receiver of the suspended computation. |
6854 DECL_ACCESSORS(receiver, Object) | 6855 DECL_ACCESSORS(receiver, Object) |
6855 | 6856 |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6903 static const int kResultDonePropertyOffset = | 6904 static const int kResultDonePropertyOffset = |
6904 kResultValuePropertyOffset + kPointerSize; | 6905 kResultValuePropertyOffset + kPointerSize; |
6905 static const int kResultSize = kResultDonePropertyOffset + kPointerSize; | 6906 static const int kResultSize = kResultDonePropertyOffset + kPointerSize; |
6906 | 6907 |
6907 private: | 6908 private: |
6908 DISALLOW_IMPLICIT_CONSTRUCTORS(JSGeneratorObject); | 6909 DISALLOW_IMPLICIT_CONSTRUCTORS(JSGeneratorObject); |
6909 }; | 6910 }; |
6910 | 6911 |
6911 | 6912 |
6912 // Representation for module instance objects. | 6913 // Representation for module instance objects. |
6913 class JSModule FINAL : public JSObject { | 6914 class JSModule V8_FINAL : public JSObject { |
6914 public: | 6915 public: |
6915 // [context]: the context holding the module's locals, or undefined if none. | 6916 // [context]: the context holding the module's locals, or undefined if none. |
6916 DECL_ACCESSORS(context, Object) | 6917 DECL_ACCESSORS(context, Object) |
6917 | 6918 |
6918 // [scope_info]: Scope info. | 6919 // [scope_info]: Scope info. |
6919 DECL_ACCESSORS(scope_info, ScopeInfo) | 6920 DECL_ACCESSORS(scope_info, ScopeInfo) |
6920 | 6921 |
6921 // Casting. | 6922 // Casting. |
6922 static inline JSModule* cast(Object* obj); | 6923 static inline JSModule* cast(Object* obj); |
6923 | 6924 |
6924 // Dispatched behavior. | 6925 // Dispatched behavior. |
6925 DECLARE_PRINTER(JSModule) | 6926 DECLARE_PRINTER(JSModule) |
6926 DECLARE_VERIFIER(JSModule) | 6927 DECLARE_VERIFIER(JSModule) |
6927 | 6928 |
6928 // Layout description. | 6929 // Layout description. |
6929 static const int kContextOffset = JSObject::kHeaderSize; | 6930 static const int kContextOffset = JSObject::kHeaderSize; |
6930 static const int kScopeInfoOffset = kContextOffset + kPointerSize; | 6931 static const int kScopeInfoOffset = kContextOffset + kPointerSize; |
6931 static const int kSize = kScopeInfoOffset + kPointerSize; | 6932 static const int kSize = kScopeInfoOffset + kPointerSize; |
6932 | 6933 |
6933 private: | 6934 private: |
6934 DISALLOW_IMPLICIT_CONSTRUCTORS(JSModule); | 6935 DISALLOW_IMPLICIT_CONSTRUCTORS(JSModule); |
6935 }; | 6936 }; |
6936 | 6937 |
6937 | 6938 |
6938 // JSFunction describes JavaScript functions. | 6939 // JSFunction describes JavaScript functions. |
6939 class JSFunction FINAL : public JSObject { | 6940 class JSFunction V8_FINAL : public JSObject { |
6940 public: | 6941 public: |
6941 // [prototype_or_initial_map]: | 6942 // [prototype_or_initial_map]: |
6942 DECL_ACCESSORS(prototype_or_initial_map, Object) | 6943 DECL_ACCESSORS(prototype_or_initial_map, Object) |
6943 | 6944 |
6944 // [shared]: The information about the function that | 6945 // [shared]: The information about the function that |
6945 // can be shared by instances. | 6946 // can be shared by instances. |
6946 DECL_ACCESSORS(shared, SharedFunctionInfo) | 6947 DECL_ACCESSORS(shared, SharedFunctionInfo) |
6947 | 6948 |
6948 // [context]: The context for this function. | 6949 // [context]: The context for this function. |
6949 inline Context* context(); | 6950 inline Context* context(); |
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7116 | 7117 |
7117 | 7118 |
7118 // JSGlobalProxy's prototype must be a JSGlobalObject or null, | 7119 // JSGlobalProxy's prototype must be a JSGlobalObject or null, |
7119 // and the prototype is hidden. JSGlobalProxy always delegates | 7120 // and the prototype is hidden. JSGlobalProxy always delegates |
7120 // property accesses to its prototype if the prototype is not null. | 7121 // property accesses to its prototype if the prototype is not null. |
7121 // | 7122 // |
7122 // A JSGlobalProxy can be reinitialized which will preserve its identity. | 7123 // A JSGlobalProxy can be reinitialized which will preserve its identity. |
7123 // | 7124 // |
7124 // Accessing a JSGlobalProxy requires security check. | 7125 // Accessing a JSGlobalProxy requires security check. |
7125 | 7126 |
7126 class JSGlobalProxy FINAL : public JSObject { | 7127 class JSGlobalProxy V8_FINAL : public JSObject { |
7127 public: | 7128 public: |
7128 // [native_context]: the owner native context of this global proxy object. | 7129 // [native_context]: the owner native context of this global proxy object. |
7129 // It is null value if this object is not used by any context. | 7130 // It is null value if this object is not used by any context. |
7130 DECL_ACCESSORS(native_context, Object) | 7131 DECL_ACCESSORS(native_context, Object) |
7131 | 7132 |
7132 // Casting. | 7133 // Casting. |
7133 static inline JSGlobalProxy* cast(Object* obj); | 7134 static inline JSGlobalProxy* cast(Object* obj); |
7134 | 7135 |
7135 // Dispatched behavior. | 7136 // Dispatched behavior. |
7136 DECLARE_PRINTER(JSGlobalProxy) | 7137 DECLARE_PRINTER(JSGlobalProxy) |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7189 static const int kGlobalContextOffset = kNativeContextOffset + kPointerSize; | 7190 static const int kGlobalContextOffset = kNativeContextOffset + kPointerSize; |
7190 static const int kGlobalReceiverOffset = kGlobalContextOffset + kPointerSize; | 7191 static const int kGlobalReceiverOffset = kGlobalContextOffset + kPointerSize; |
7191 static const int kHeaderSize = kGlobalReceiverOffset + kPointerSize; | 7192 static const int kHeaderSize = kGlobalReceiverOffset + kPointerSize; |
7192 | 7193 |
7193 private: | 7194 private: |
7194 DISALLOW_IMPLICIT_CONSTRUCTORS(GlobalObject); | 7195 DISALLOW_IMPLICIT_CONSTRUCTORS(GlobalObject); |
7195 }; | 7196 }; |
7196 | 7197 |
7197 | 7198 |
7198 // JavaScript global object. | 7199 // JavaScript global object. |
7199 class JSGlobalObject FINAL : public GlobalObject { | 7200 class JSGlobalObject V8_FINAL : public GlobalObject { |
7200 public: | 7201 public: |
7201 // Casting. | 7202 // Casting. |
7202 static inline JSGlobalObject* cast(Object* obj); | 7203 static inline JSGlobalObject* cast(Object* obj); |
7203 | 7204 |
7204 // Dispatched behavior. | 7205 // Dispatched behavior. |
7205 DECLARE_PRINTER(JSGlobalObject) | 7206 DECLARE_PRINTER(JSGlobalObject) |
7206 DECLARE_VERIFIER(JSGlobalObject) | 7207 DECLARE_VERIFIER(JSGlobalObject) |
7207 | 7208 |
7208 // Layout description. | 7209 // Layout description. |
7209 static const int kSize = GlobalObject::kHeaderSize; | 7210 static const int kSize = GlobalObject::kHeaderSize; |
7210 | 7211 |
7211 private: | 7212 private: |
7212 DISALLOW_IMPLICIT_CONSTRUCTORS(JSGlobalObject); | 7213 DISALLOW_IMPLICIT_CONSTRUCTORS(JSGlobalObject); |
7213 }; | 7214 }; |
7214 | 7215 |
7215 | 7216 |
7216 // Builtins global object which holds the runtime routines written in | 7217 // Builtins global object which holds the runtime routines written in |
7217 // JavaScript. | 7218 // JavaScript. |
7218 class JSBuiltinsObject FINAL : public GlobalObject { | 7219 class JSBuiltinsObject V8_FINAL : public GlobalObject { |
7219 public: | 7220 public: |
7220 // Accessors for the runtime routines written in JavaScript. | 7221 // Accessors for the runtime routines written in JavaScript. |
7221 inline Object* javascript_builtin(Builtins::JavaScript id); | 7222 inline Object* javascript_builtin(Builtins::JavaScript id); |
7222 inline void set_javascript_builtin(Builtins::JavaScript id, Object* value); | 7223 inline void set_javascript_builtin(Builtins::JavaScript id, Object* value); |
7223 | 7224 |
7224 // Accessors for code of the runtime routines written in JavaScript. | 7225 // Accessors for code of the runtime routines written in JavaScript. |
7225 inline Code* javascript_builtin_code(Builtins::JavaScript id); | 7226 inline Code* javascript_builtin_code(Builtins::JavaScript id); |
7226 inline void set_javascript_builtin_code(Builtins::JavaScript id, Code* value); | 7227 inline void set_javascript_builtin_code(Builtins::JavaScript id, Code* value); |
7227 | 7228 |
7228 // Casting. | 7229 // Casting. |
(...skipping 20 matching lines...) Expand all Loading... |
7249 static int OffsetOfCodeWithId(Builtins::JavaScript id) { | 7250 static int OffsetOfCodeWithId(Builtins::JavaScript id) { |
7250 return kJSBuiltinsCodeOffset + id * kPointerSize; | 7251 return kJSBuiltinsCodeOffset + id * kPointerSize; |
7251 } | 7252 } |
7252 | 7253 |
7253 private: | 7254 private: |
7254 DISALLOW_IMPLICIT_CONSTRUCTORS(JSBuiltinsObject); | 7255 DISALLOW_IMPLICIT_CONSTRUCTORS(JSBuiltinsObject); |
7255 }; | 7256 }; |
7256 | 7257 |
7257 | 7258 |
7258 // Representation for JS Wrapper objects, String, Number, Boolean, etc. | 7259 // Representation for JS Wrapper objects, String, Number, Boolean, etc. |
7259 class JSValue FINAL : public JSObject { | 7260 class JSValue V8_FINAL : public JSObject { |
7260 public: | 7261 public: |
7261 // [value]: the object being wrapped. | 7262 // [value]: the object being wrapped. |
7262 DECL_ACCESSORS(value, Object) | 7263 DECL_ACCESSORS(value, Object) |
7263 | 7264 |
7264 // Casting. | 7265 // Casting. |
7265 static inline JSValue* cast(Object* obj); | 7266 static inline JSValue* cast(Object* obj); |
7266 | 7267 |
7267 // Dispatched behavior. | 7268 // Dispatched behavior. |
7268 DECLARE_PRINTER(JSValue) | 7269 DECLARE_PRINTER(JSValue) |
7269 DECLARE_VERIFIER(JSValue) | 7270 DECLARE_VERIFIER(JSValue) |
7270 | 7271 |
7271 // Layout description. | 7272 // Layout description. |
7272 static const int kValueOffset = JSObject::kHeaderSize; | 7273 static const int kValueOffset = JSObject::kHeaderSize; |
7273 static const int kSize = kValueOffset + kPointerSize; | 7274 static const int kSize = kValueOffset + kPointerSize; |
7274 | 7275 |
7275 private: | 7276 private: |
7276 DISALLOW_IMPLICIT_CONSTRUCTORS(JSValue); | 7277 DISALLOW_IMPLICIT_CONSTRUCTORS(JSValue); |
7277 }; | 7278 }; |
7278 | 7279 |
7279 | 7280 |
7280 class DateCache; | 7281 class DateCache; |
7281 | 7282 |
7282 // Representation for JS date objects. | 7283 // Representation for JS date objects. |
7283 class JSDate FINAL : public JSObject { | 7284 class JSDate V8_FINAL : public JSObject { |
7284 public: | 7285 public: |
7285 // If one component is NaN, all of them are, indicating a NaN time value. | 7286 // If one component is NaN, all of them are, indicating a NaN time value. |
7286 // [value]: the time value. | 7287 // [value]: the time value. |
7287 DECL_ACCESSORS(value, Object) | 7288 DECL_ACCESSORS(value, Object) |
7288 // [year]: caches year. Either undefined, smi, or NaN. | 7289 // [year]: caches year. Either undefined, smi, or NaN. |
7289 DECL_ACCESSORS(year, Object) | 7290 DECL_ACCESSORS(year, Object) |
7290 // [month]: caches month. Either undefined, smi, or NaN. | 7291 // [month]: caches month. Either undefined, smi, or NaN. |
7291 DECL_ACCESSORS(month, Object) | 7292 DECL_ACCESSORS(month, Object) |
7292 // [day]: caches day. Either undefined, smi, or NaN. | 7293 // [day]: caches day. Either undefined, smi, or NaN. |
7293 DECL_ACCESSORS(day, Object) | 7294 DECL_ACCESSORS(day, Object) |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7370 DISALLOW_IMPLICIT_CONSTRUCTORS(JSDate); | 7371 DISALLOW_IMPLICIT_CONSTRUCTORS(JSDate); |
7371 }; | 7372 }; |
7372 | 7373 |
7373 | 7374 |
7374 // Representation of message objects used for error reporting through | 7375 // Representation of message objects used for error reporting through |
7375 // the API. The messages are formatted in JavaScript so this object is | 7376 // the API. The messages are formatted in JavaScript so this object is |
7376 // a real JavaScript object. The information used for formatting the | 7377 // a real JavaScript object. The information used for formatting the |
7377 // error messages are not directly accessible from JavaScript to | 7378 // error messages are not directly accessible from JavaScript to |
7378 // prevent leaking information to user code called during error | 7379 // prevent leaking information to user code called during error |
7379 // formatting. | 7380 // formatting. |
7380 class JSMessageObject FINAL : public JSObject { | 7381 class JSMessageObject V8_FINAL : public JSObject { |
7381 public: | 7382 public: |
7382 // [type]: the type of error message. | 7383 // [type]: the type of error message. |
7383 DECL_ACCESSORS(type, String) | 7384 DECL_ACCESSORS(type, String) |
7384 | 7385 |
7385 // [arguments]: the arguments for formatting the error message. | 7386 // [arguments]: the arguments for formatting the error message. |
7386 DECL_ACCESSORS(arguments, JSArray) | 7387 DECL_ACCESSORS(arguments, JSArray) |
7387 | 7388 |
7388 // [script]: the script from which the error message originated. | 7389 // [script]: the script from which the error message originated. |
7389 DECL_ACCESSORS(script, Object) | 7390 DECL_ACCESSORS(script, Object) |
7390 | 7391 |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7434 // - reference to the original flag string | 7435 // - reference to the original flag string |
7435 // If it is an atom regexp | 7436 // If it is an atom regexp |
7436 // - a reference to a literal string to search for | 7437 // - a reference to a literal string to search for |
7437 // If it is an irregexp regexp: | 7438 // If it is an irregexp regexp: |
7438 // - a reference to code for ASCII inputs (bytecode or compiled), or a smi | 7439 // - a reference to code for ASCII inputs (bytecode or compiled), or a smi |
7439 // used for tracking the last usage (used for code flushing). | 7440 // used for tracking the last usage (used for code flushing). |
7440 // - a reference to code for UC16 inputs (bytecode or compiled), or a smi | 7441 // - a reference to code for UC16 inputs (bytecode or compiled), or a smi |
7441 // used for tracking the last usage (used for code flushing).. | 7442 // used for tracking the last usage (used for code flushing).. |
7442 // - max number of registers used by irregexp implementations. | 7443 // - max number of registers used by irregexp implementations. |
7443 // - number of capture registers (output values) of the regexp. | 7444 // - number of capture registers (output values) of the regexp. |
7444 class JSRegExp FINAL : public JSObject { | 7445 class JSRegExp V8_FINAL : public JSObject { |
7445 public: | 7446 public: |
7446 // Meaning of Type: | 7447 // Meaning of Type: |
7447 // NOT_COMPILED: Initial value. No data has been stored in the JSRegExp yet. | 7448 // NOT_COMPILED: Initial value. No data has been stored in the JSRegExp yet. |
7448 // ATOM: A simple string to match against using an indexOf operation. | 7449 // ATOM: A simple string to match against using an indexOf operation. |
7449 // IRREGEXP: Compiled with Irregexp. | 7450 // IRREGEXP: Compiled with Irregexp. |
7450 // IRREGEXP_NATIVE: Compiled to native code with Irregexp. | 7451 // IRREGEXP_NATIVE: Compiled to native code with Irregexp. |
7451 enum Type { NOT_COMPILED, ATOM, IRREGEXP }; | 7452 enum Type { NOT_COMPILED, ATOM, IRREGEXP }; |
7452 enum Flag { NONE = 0, GLOBAL = 1, IGNORE_CASE = 2, MULTILINE = 4 }; | 7453 enum Flag { NONE = 0, GLOBAL = 1, IGNORE_CASE = 2, MULTILINE = 4 }; |
7453 | 7454 |
7454 class Flags { | 7455 class Flags { |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7557 // object is in the saved code field. | 7558 // object is in the saved code field. |
7558 static const int kCompilationErrorValue = -2; | 7559 static const int kCompilationErrorValue = -2; |
7559 | 7560 |
7560 // When we store the sweep generation at which we moved the code from the | 7561 // When we store the sweep generation at which we moved the code from the |
7561 // code index to the saved code index we mask it of to be in the [0:255] | 7562 // code index to the saved code index we mask it of to be in the [0:255] |
7562 // range. | 7563 // range. |
7563 static const int kCodeAgeMask = 0xff; | 7564 static const int kCodeAgeMask = 0xff; |
7564 }; | 7565 }; |
7565 | 7566 |
7566 | 7567 |
7567 class CompilationCacheShape FINAL : public BaseShape<HashTableKey*> { | 7568 class CompilationCacheShape V8_FINAL : public BaseShape<HashTableKey*> { |
7568 public: | 7569 public: |
7569 static inline bool IsMatch(HashTableKey* key, Object* value) { | 7570 static inline bool IsMatch(HashTableKey* key, Object* value) { |
7570 return key->IsMatch(value); | 7571 return key->IsMatch(value); |
7571 } | 7572 } |
7572 | 7573 |
7573 static inline uint32_t Hash(HashTableKey* key) { | 7574 static inline uint32_t Hash(HashTableKey* key) { |
7574 return key->Hash(); | 7575 return key->Hash(); |
7575 } | 7576 } |
7576 | 7577 |
7577 static inline uint32_t HashForObject(HashTableKey* key, Object* object) { | 7578 static inline uint32_t HashForObject(HashTableKey* key, Object* object) { |
7578 return key->HashForObject(object); | 7579 return key->HashForObject(object); |
7579 } | 7580 } |
7580 | 7581 |
7581 MUST_USE_RESULT static MaybeObject* AsObject(Heap* heap, | 7582 MUST_USE_RESULT static MaybeObject* AsObject(Heap* heap, |
7582 HashTableKey* key) { | 7583 HashTableKey* key) { |
7583 return key->AsObject(heap); | 7584 return key->AsObject(heap); |
7584 } | 7585 } |
7585 | 7586 |
7586 static const int kPrefixSize = 0; | 7587 static const int kPrefixSize = 0; |
7587 static const int kEntrySize = 2; | 7588 static const int kEntrySize = 2; |
7588 }; | 7589 }; |
7589 | 7590 |
7590 | 7591 |
7591 class CompilationCacheTable FINAL : public HashTable<CompilationCacheShape, | 7592 class CompilationCacheTable V8_FINAL : public HashTable<CompilationCacheShape, |
7592 HashTableKey*> { | 7593 HashTableKey*> { |
7593 public: | 7594 public: |
7594 // Find cached value for a string key, otherwise return null. | 7595 // Find cached value for a string key, otherwise return null. |
7595 Object* Lookup(String* src, Context* context); | 7596 Object* Lookup(String* src, Context* context); |
7596 Object* LookupEval(String* src, | 7597 Object* LookupEval(String* src, |
7597 Context* context, | 7598 Context* context, |
7598 LanguageMode language_mode, | 7599 LanguageMode language_mode, |
7599 int scope_position); | 7600 int scope_position); |
7600 Object* LookupRegExp(String* source, JSRegExp::Flags flags); | 7601 Object* LookupRegExp(String* source, JSRegExp::Flags flags); |
7601 MUST_USE_RESULT MaybeObject* Put(String* src, | 7602 MUST_USE_RESULT MaybeObject* Put(String* src, |
(...skipping 10 matching lines...) Expand all Loading... |
7612 // Remove given value from cache. | 7613 // Remove given value from cache. |
7613 void Remove(Object* value); | 7614 void Remove(Object* value); |
7614 | 7615 |
7615 static inline CompilationCacheTable* cast(Object* obj); | 7616 static inline CompilationCacheTable* cast(Object* obj); |
7616 | 7617 |
7617 private: | 7618 private: |
7618 DISALLOW_IMPLICIT_CONSTRUCTORS(CompilationCacheTable); | 7619 DISALLOW_IMPLICIT_CONSTRUCTORS(CompilationCacheTable); |
7619 }; | 7620 }; |
7620 | 7621 |
7621 | 7622 |
7622 class CodeCache FINAL : public Struct { | 7623 class CodeCache V8_FINAL : public Struct { |
7623 public: | 7624 public: |
7624 DECL_ACCESSORS(default_cache, FixedArray) | 7625 DECL_ACCESSORS(default_cache, FixedArray) |
7625 DECL_ACCESSORS(normal_type_cache, Object) | 7626 DECL_ACCESSORS(normal_type_cache, Object) |
7626 | 7627 |
7627 // Add the code object to the cache. | 7628 // Add the code object to the cache. |
7628 MUST_USE_RESULT MaybeObject* Update(Name* name, Code* code); | 7629 MUST_USE_RESULT MaybeObject* Update(Name* name, Code* code); |
7629 | 7630 |
7630 // Lookup code object in the cache. Returns code object if found and undefined | 7631 // Lookup code object in the cache. Returns code object if found and undefined |
7631 // if not. | 7632 // if not. |
7632 Object* Lookup(Name* name, Code::Flags flags); | 7633 Object* Lookup(Name* name, Code::Flags flags); |
(...skipping 27 matching lines...) Expand all Loading... |
7660 // Code cache layout of the default cache. Elements are alternating name and | 7661 // Code cache layout of the default cache. Elements are alternating name and |
7661 // code objects for non normal load/store/call IC's. | 7662 // code objects for non normal load/store/call IC's. |
7662 static const int kCodeCacheEntrySize = 2; | 7663 static const int kCodeCacheEntrySize = 2; |
7663 static const int kCodeCacheEntryNameOffset = 0; | 7664 static const int kCodeCacheEntryNameOffset = 0; |
7664 static const int kCodeCacheEntryCodeOffset = 1; | 7665 static const int kCodeCacheEntryCodeOffset = 1; |
7665 | 7666 |
7666 DISALLOW_IMPLICIT_CONSTRUCTORS(CodeCache); | 7667 DISALLOW_IMPLICIT_CONSTRUCTORS(CodeCache); |
7667 }; | 7668 }; |
7668 | 7669 |
7669 | 7670 |
7670 class CodeCacheHashTableShape FINAL : public BaseShape<HashTableKey*> { | 7671 class CodeCacheHashTableShape V8_FINAL : public BaseShape<HashTableKey*> { |
7671 public: | 7672 public: |
7672 static inline bool IsMatch(HashTableKey* key, Object* value) { | 7673 static inline bool IsMatch(HashTableKey* key, Object* value) { |
7673 return key->IsMatch(value); | 7674 return key->IsMatch(value); |
7674 } | 7675 } |
7675 | 7676 |
7676 static inline uint32_t Hash(HashTableKey* key) { | 7677 static inline uint32_t Hash(HashTableKey* key) { |
7677 return key->Hash(); | 7678 return key->Hash(); |
7678 } | 7679 } |
7679 | 7680 |
7680 static inline uint32_t HashForObject(HashTableKey* key, Object* object) { | 7681 static inline uint32_t HashForObject(HashTableKey* key, Object* object) { |
7681 return key->HashForObject(object); | 7682 return key->HashForObject(object); |
7682 } | 7683 } |
7683 | 7684 |
7684 MUST_USE_RESULT static MaybeObject* AsObject(Heap* heap, | 7685 MUST_USE_RESULT static MaybeObject* AsObject(Heap* heap, |
7685 HashTableKey* key) { | 7686 HashTableKey* key) { |
7686 return key->AsObject(heap); | 7687 return key->AsObject(heap); |
7687 } | 7688 } |
7688 | 7689 |
7689 static const int kPrefixSize = 0; | 7690 static const int kPrefixSize = 0; |
7690 static const int kEntrySize = 2; | 7691 static const int kEntrySize = 2; |
7691 }; | 7692 }; |
7692 | 7693 |
7693 | 7694 |
7694 class CodeCacheHashTable FINAL : public HashTable<CodeCacheHashTableShape, | 7695 class CodeCacheHashTable V8_FINAL : public HashTable<CodeCacheHashTableShape, |
7695 HashTableKey*> { | 7696 HashTableKey*> { |
7696 public: | 7697 public: |
7697 Object* Lookup(Name* name, Code::Flags flags); | 7698 Object* Lookup(Name* name, Code::Flags flags); |
7698 MUST_USE_RESULT MaybeObject* Put(Name* name, Code* code); | 7699 MUST_USE_RESULT MaybeObject* Put(Name* name, Code* code); |
7699 | 7700 |
7700 int GetIndex(Name* name, Code::Flags flags); | 7701 int GetIndex(Name* name, Code::Flags flags); |
7701 void RemoveByIndex(int index); | 7702 void RemoveByIndex(int index); |
7702 | 7703 |
7703 static inline CodeCacheHashTable* cast(Object* obj); | 7704 static inline CodeCacheHashTable* cast(Object* obj); |
7704 | 7705 |
7705 // Initial size of the fixed array backing the hash table. | 7706 // Initial size of the fixed array backing the hash table. |
7706 static const int kInitialSize = 64; | 7707 static const int kInitialSize = 64; |
7707 | 7708 |
7708 private: | 7709 private: |
7709 DISALLOW_IMPLICIT_CONSTRUCTORS(CodeCacheHashTable); | 7710 DISALLOW_IMPLICIT_CONSTRUCTORS(CodeCacheHashTable); |
7710 }; | 7711 }; |
7711 | 7712 |
7712 | 7713 |
7713 class PolymorphicCodeCache FINAL : public Struct { | 7714 class PolymorphicCodeCache V8_FINAL : public Struct { |
7714 public: | 7715 public: |
7715 DECL_ACCESSORS(cache, Object) | 7716 DECL_ACCESSORS(cache, Object) |
7716 | 7717 |
7717 static void Update(Handle<PolymorphicCodeCache> cache, | 7718 static void Update(Handle<PolymorphicCodeCache> cache, |
7718 MapHandleList* maps, | 7719 MapHandleList* maps, |
7719 Code::Flags flags, | 7720 Code::Flags flags, |
7720 Handle<Code> code); | 7721 Handle<Code> code); |
7721 | 7722 |
7722 MUST_USE_RESULT MaybeObject* Update(MapHandleList* maps, | 7723 MUST_USE_RESULT MaybeObject* Update(MapHandleList* maps, |
7723 Code::Flags flags, | 7724 Code::Flags flags, |
7724 Code* code); | 7725 Code* code); |
7725 | 7726 |
7726 // Returns an undefined value if the entry is not found. | 7727 // Returns an undefined value if the entry is not found. |
7727 Handle<Object> Lookup(MapHandleList* maps, Code::Flags flags); | 7728 Handle<Object> Lookup(MapHandleList* maps, Code::Flags flags); |
7728 | 7729 |
7729 static inline PolymorphicCodeCache* cast(Object* obj); | 7730 static inline PolymorphicCodeCache* cast(Object* obj); |
7730 | 7731 |
7731 // Dispatched behavior. | 7732 // Dispatched behavior. |
7732 DECLARE_PRINTER(PolymorphicCodeCache) | 7733 DECLARE_PRINTER(PolymorphicCodeCache) |
7733 DECLARE_VERIFIER(PolymorphicCodeCache) | 7734 DECLARE_VERIFIER(PolymorphicCodeCache) |
7734 | 7735 |
7735 static const int kCacheOffset = HeapObject::kHeaderSize; | 7736 static const int kCacheOffset = HeapObject::kHeaderSize; |
7736 static const int kSize = kCacheOffset + kPointerSize; | 7737 static const int kSize = kCacheOffset + kPointerSize; |
7737 | 7738 |
7738 private: | 7739 private: |
7739 DISALLOW_IMPLICIT_CONSTRUCTORS(PolymorphicCodeCache); | 7740 DISALLOW_IMPLICIT_CONSTRUCTORS(PolymorphicCodeCache); |
7740 }; | 7741 }; |
7741 | 7742 |
7742 | 7743 |
7743 class PolymorphicCodeCacheHashTable FINAL | 7744 class PolymorphicCodeCacheHashTable V8_FINAL |
7744 : public HashTable<CodeCacheHashTableShape, HashTableKey*> { | 7745 : public HashTable<CodeCacheHashTableShape, HashTableKey*> { |
7745 public: | 7746 public: |
7746 Object* Lookup(MapHandleList* maps, int code_kind); | 7747 Object* Lookup(MapHandleList* maps, int code_kind); |
7747 | 7748 |
7748 MUST_USE_RESULT MaybeObject* Put(MapHandleList* maps, | 7749 MUST_USE_RESULT MaybeObject* Put(MapHandleList* maps, |
7749 int code_kind, | 7750 int code_kind, |
7750 Code* code); | 7751 Code* code); |
7751 | 7752 |
7752 static inline PolymorphicCodeCacheHashTable* cast(Object* obj); | 7753 static inline PolymorphicCodeCacheHashTable* cast(Object* obj); |
7753 | 7754 |
7754 static const int kInitialSize = 64; | 7755 static const int kInitialSize = 64; |
7755 private: | 7756 private: |
7756 DISALLOW_IMPLICIT_CONSTRUCTORS(PolymorphicCodeCacheHashTable); | 7757 DISALLOW_IMPLICIT_CONSTRUCTORS(PolymorphicCodeCacheHashTable); |
7757 }; | 7758 }; |
7758 | 7759 |
7759 | 7760 |
7760 class TypeFeedbackInfo FINAL : public Struct { | 7761 class TypeFeedbackInfo V8_FINAL : public Struct { |
7761 public: | 7762 public: |
7762 inline int ic_total_count(); | 7763 inline int ic_total_count(); |
7763 inline void set_ic_total_count(int count); | 7764 inline void set_ic_total_count(int count); |
7764 | 7765 |
7765 inline int ic_with_type_info_count(); | 7766 inline int ic_with_type_info_count(); |
7766 inline void change_ic_with_type_info_count(int count); | 7767 inline void change_ic_with_type_info_count(int count); |
7767 | 7768 |
7768 inline void initialize_storage(); | 7769 inline void initialize_storage(); |
7769 | 7770 |
7770 inline void change_own_type_change_checksum(); | 7771 inline void change_own_type_change_checksum(); |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7804 }; | 7805 }; |
7805 | 7806 |
7806 | 7807 |
7807 enum AllocationSiteMode { | 7808 enum AllocationSiteMode { |
7808 DONT_TRACK_ALLOCATION_SITE, | 7809 DONT_TRACK_ALLOCATION_SITE, |
7809 TRACK_ALLOCATION_SITE, | 7810 TRACK_ALLOCATION_SITE, |
7810 LAST_ALLOCATION_SITE_MODE = TRACK_ALLOCATION_SITE | 7811 LAST_ALLOCATION_SITE_MODE = TRACK_ALLOCATION_SITE |
7811 }; | 7812 }; |
7812 | 7813 |
7813 | 7814 |
7814 class AllocationSite FINAL : public Struct { | 7815 class AllocationSite V8_FINAL : public Struct { |
7815 public: | 7816 public: |
7816 static const uint32_t kMaximumArrayBytesToPretransition = 8 * 1024; | 7817 static const uint32_t kMaximumArrayBytesToPretransition = 8 * 1024; |
7817 | 7818 |
7818 DECL_ACCESSORS(transition_info, Object) | 7819 DECL_ACCESSORS(transition_info, Object) |
7819 DECL_ACCESSORS(weak_next, Object) | 7820 DECL_ACCESSORS(weak_next, Object) |
7820 | 7821 |
7821 void Initialize() { | 7822 void Initialize() { |
7822 SetElementsKind(GetInitialFastElementsKind()); | 7823 SetElementsKind(GetInitialFastElementsKind()); |
7823 } | 7824 } |
7824 | 7825 |
(...skipping 27 matching lines...) Expand all Loading... |
7852 | 7853 |
7853 typedef FixedBodyDescriptor<HeapObject::kHeaderSize, | 7854 typedef FixedBodyDescriptor<HeapObject::kHeaderSize, |
7854 kTransitionInfoOffset + kPointerSize, | 7855 kTransitionInfoOffset + kPointerSize, |
7855 kSize> BodyDescriptor; | 7856 kSize> BodyDescriptor; |
7856 | 7857 |
7857 private: | 7858 private: |
7858 DISALLOW_IMPLICIT_CONSTRUCTORS(AllocationSite); | 7859 DISALLOW_IMPLICIT_CONSTRUCTORS(AllocationSite); |
7859 }; | 7860 }; |
7860 | 7861 |
7861 | 7862 |
7862 class AllocationMemento FINAL : public Struct { | 7863 class AllocationMemento V8_FINAL : public Struct { |
7863 public: | 7864 public: |
7864 static const int kAllocationSiteOffset = HeapObject::kHeaderSize; | 7865 static const int kAllocationSiteOffset = HeapObject::kHeaderSize; |
7865 static const int kSize = kAllocationSiteOffset + kPointerSize; | 7866 static const int kSize = kAllocationSiteOffset + kPointerSize; |
7866 | 7867 |
7867 DECL_ACCESSORS(allocation_site, Object) | 7868 DECL_ACCESSORS(allocation_site, Object) |
7868 | 7869 |
7869 bool IsValid() { return allocation_site()->IsAllocationSite(); } | 7870 bool IsValid() { return allocation_site()->IsAllocationSite(); } |
7870 AllocationSite* GetAllocationSite() { | 7871 AllocationSite* GetAllocationSite() { |
7871 ASSERT(IsValid()); | 7872 ASSERT(IsValid()); |
7872 return AllocationSite::cast(allocation_site()); | 7873 return AllocationSite::cast(allocation_site()); |
(...skipping 12 matching lines...) Expand all Loading... |
7885 | 7886 |
7886 | 7887 |
7887 // Representation of a slow alias as part of a non-strict arguments objects. | 7888 // Representation of a slow alias as part of a non-strict arguments objects. |
7888 // For fast aliases (if HasNonStrictArgumentsElements()): | 7889 // For fast aliases (if HasNonStrictArgumentsElements()): |
7889 // - the parameter map contains an index into the context | 7890 // - the parameter map contains an index into the context |
7890 // - all attributes of the element have default values | 7891 // - all attributes of the element have default values |
7891 // For slow aliases (if HasDictionaryArgumentsElements()): | 7892 // For slow aliases (if HasDictionaryArgumentsElements()): |
7892 // - the parameter map contains no fast alias mapping (i.e. the hole) | 7893 // - the parameter map contains no fast alias mapping (i.e. the hole) |
7893 // - this struct (in the slow backing store) contains an index into the context | 7894 // - this struct (in the slow backing store) contains an index into the context |
7894 // - all attributes are available as part if the property details | 7895 // - all attributes are available as part if the property details |
7895 class AliasedArgumentsEntry FINAL : public Struct { | 7896 class AliasedArgumentsEntry V8_FINAL : public Struct { |
7896 public: | 7897 public: |
7897 inline int aliased_context_slot(); | 7898 inline int aliased_context_slot(); |
7898 inline void set_aliased_context_slot(int count); | 7899 inline void set_aliased_context_slot(int count); |
7899 | 7900 |
7900 static inline AliasedArgumentsEntry* cast(Object* obj); | 7901 static inline AliasedArgumentsEntry* cast(Object* obj); |
7901 | 7902 |
7902 // Dispatched behavior. | 7903 // Dispatched behavior. |
7903 DECLARE_PRINTER(AliasedArgumentsEntry) | 7904 DECLARE_PRINTER(AliasedArgumentsEntry) |
7904 DECLARE_VERIFIER(AliasedArgumentsEntry) | 7905 DECLARE_VERIFIER(AliasedArgumentsEntry) |
7905 | 7906 |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7973 // few bits of information is moderately expensive, involving two memory | 7974 // few bits of information is moderately expensive, involving two memory |
7974 // loads where the second is dependent on the first. To improve efficiency | 7975 // loads where the second is dependent on the first. To improve efficiency |
7975 // the shape of the string is given its own class so that it can be retrieved | 7976 // the shape of the string is given its own class so that it can be retrieved |
7976 // once and used for several string operations. A StringShape is small enough | 7977 // once and used for several string operations. A StringShape is small enough |
7977 // to be passed by value and is immutable, but be aware that flattening a | 7978 // to be passed by value and is immutable, but be aware that flattening a |
7978 // string can potentially alter its shape. Also be aware that a GC caused by | 7979 // string can potentially alter its shape. Also be aware that a GC caused by |
7979 // something else can alter the shape of a string due to ConsString | 7980 // something else can alter the shape of a string due to ConsString |
7980 // shortcutting. Keeping these restrictions in mind has proven to be error- | 7981 // shortcutting. Keeping these restrictions in mind has proven to be error- |
7981 // prone and so we no longer put StringShapes in variables unless there is a | 7982 // prone and so we no longer put StringShapes in variables unless there is a |
7982 // concrete performance benefit at that particular point in the code. | 7983 // concrete performance benefit at that particular point in the code. |
7983 class StringShape FINAL BASE_EMBEDDED { | 7984 class StringShape V8_FINAL BASE_EMBEDDED { |
7984 public: | 7985 public: |
7985 inline explicit StringShape(String* s); | 7986 inline explicit StringShape(String* s); |
7986 inline explicit StringShape(Map* s); | 7987 inline explicit StringShape(Map* s); |
7987 inline explicit StringShape(InstanceType t); | 7988 inline explicit StringShape(InstanceType t); |
7988 inline bool IsSequential(); | 7989 inline bool IsSequential(); |
7989 inline bool IsExternal(); | 7990 inline bool IsExternal(); |
7990 inline bool IsCons(); | 7991 inline bool IsCons(); |
7991 inline bool IsSliced(); | 7992 inline bool IsSliced(); |
7992 inline bool IsIndirect(); | 7993 inline bool IsIndirect(); |
7993 inline bool IsExternalAscii(); | 7994 inline bool IsExternalAscii(); |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8098 | 8099 |
8099 protected: | 8100 protected: |
8100 static inline bool IsHashFieldComputed(uint32_t field); | 8101 static inline bool IsHashFieldComputed(uint32_t field); |
8101 | 8102 |
8102 private: | 8103 private: |
8103 DISALLOW_IMPLICIT_CONSTRUCTORS(Name); | 8104 DISALLOW_IMPLICIT_CONSTRUCTORS(Name); |
8104 }; | 8105 }; |
8105 | 8106 |
8106 | 8107 |
8107 // ES6 symbols. | 8108 // ES6 symbols. |
8108 class Symbol FINAL : public Name { | 8109 class Symbol V8_FINAL : public Name { |
8109 public: | 8110 public: |
8110 // [name]: the print name of a symbol, or undefined if none. | 8111 // [name]: the print name of a symbol, or undefined if none. |
8111 DECL_ACCESSORS(name, Object) | 8112 DECL_ACCESSORS(name, Object) |
8112 | 8113 |
8113 // Casting. | 8114 // Casting. |
8114 static inline Symbol* cast(Object* obj); | 8115 static inline Symbol* cast(Object* obj); |
8115 | 8116 |
8116 // Dispatched behavior. | 8117 // Dispatched behavior. |
8117 DECLARE_PRINTER(Symbol) | 8118 DECLARE_PRINTER(Symbol) |
8118 DECLARE_VERIFIER(Symbol) | 8119 DECLARE_VERIFIER(Symbol) |
(...skipping 348 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8467 // truncating the original string. | 8468 // truncating the original string. |
8468 MUST_USE_RESULT static Handle<String> Truncate(Handle<SeqString> string, | 8469 MUST_USE_RESULT static Handle<String> Truncate(Handle<SeqString> string, |
8469 int new_length); | 8470 int new_length); |
8470 private: | 8471 private: |
8471 DISALLOW_IMPLICIT_CONSTRUCTORS(SeqString); | 8472 DISALLOW_IMPLICIT_CONSTRUCTORS(SeqString); |
8472 }; | 8473 }; |
8473 | 8474 |
8474 | 8475 |
8475 // The AsciiString class captures sequential ASCII string objects. | 8476 // The AsciiString class captures sequential ASCII string objects. |
8476 // Each character in the AsciiString is an ASCII character. | 8477 // Each character in the AsciiString is an ASCII character. |
8477 class SeqOneByteString FINAL : public SeqString { | 8478 class SeqOneByteString V8_FINAL : public SeqString { |
8478 public: | 8479 public: |
8479 static const bool kHasAsciiEncoding = true; | 8480 static const bool kHasAsciiEncoding = true; |
8480 | 8481 |
8481 // Dispatched behavior. | 8482 // Dispatched behavior. |
8482 inline uint16_t SeqOneByteStringGet(int index); | 8483 inline uint16_t SeqOneByteStringGet(int index); |
8483 inline void SeqOneByteStringSet(int index, uint16_t value); | 8484 inline void SeqOneByteStringSet(int index, uint16_t value); |
8484 | 8485 |
8485 // Get the address of the characters in this string. | 8486 // Get the address of the characters in this string. |
8486 inline Address GetCharsAddress(); | 8487 inline Address GetCharsAddress(); |
8487 | 8488 |
(...skipping 18 matching lines...) Expand all Loading... |
8506 // Q.v. String::kMaxLength which is the maximal size of concatenated strings. | 8507 // Q.v. String::kMaxLength which is the maximal size of concatenated strings. |
8507 static const int kMaxLength = (kMaxSize - kHeaderSize); | 8508 static const int kMaxLength = (kMaxSize - kHeaderSize); |
8508 | 8509 |
8509 private: | 8510 private: |
8510 DISALLOW_IMPLICIT_CONSTRUCTORS(SeqOneByteString); | 8511 DISALLOW_IMPLICIT_CONSTRUCTORS(SeqOneByteString); |
8511 }; | 8512 }; |
8512 | 8513 |
8513 | 8514 |
8514 // The TwoByteString class captures sequential unicode string objects. | 8515 // The TwoByteString class captures sequential unicode string objects. |
8515 // Each character in the TwoByteString is a two-byte uint16_t. | 8516 // Each character in the TwoByteString is a two-byte uint16_t. |
8516 class SeqTwoByteString FINAL : public SeqString { | 8517 class SeqTwoByteString V8_FINAL : public SeqString { |
8517 public: | 8518 public: |
8518 static const bool kHasAsciiEncoding = false; | 8519 static const bool kHasAsciiEncoding = false; |
8519 | 8520 |
8520 // Dispatched behavior. | 8521 // Dispatched behavior. |
8521 inline uint16_t SeqTwoByteStringGet(int index); | 8522 inline uint16_t SeqTwoByteStringGet(int index); |
8522 inline void SeqTwoByteStringSet(int index, uint16_t value); | 8523 inline void SeqTwoByteStringSet(int index, uint16_t value); |
8523 | 8524 |
8524 // Get the address of the characters in this string. | 8525 // Get the address of the characters in this string. |
8525 inline Address GetCharsAddress(); | 8526 inline Address GetCharsAddress(); |
8526 | 8527 |
(...skipping 27 matching lines...) Expand all Loading... |
8554 | 8555 |
8555 | 8556 |
8556 // The ConsString class describes string values built by using the | 8557 // The ConsString class describes string values built by using the |
8557 // addition operator on strings. A ConsString is a pair where the | 8558 // addition operator on strings. A ConsString is a pair where the |
8558 // first and second components are pointers to other string values. | 8559 // first and second components are pointers to other string values. |
8559 // One or both components of a ConsString can be pointers to other | 8560 // One or both components of a ConsString can be pointers to other |
8560 // ConsStrings, creating a binary tree of ConsStrings where the leaves | 8561 // ConsStrings, creating a binary tree of ConsStrings where the leaves |
8561 // are non-ConsString string values. The string value represented by | 8562 // are non-ConsString string values. The string value represented by |
8562 // a ConsString can be obtained by concatenating the leaf string | 8563 // a ConsString can be obtained by concatenating the leaf string |
8563 // values in a left-to-right depth-first traversal of the tree. | 8564 // values in a left-to-right depth-first traversal of the tree. |
8564 class ConsString FINAL : public String { | 8565 class ConsString V8_FINAL : public String { |
8565 public: | 8566 public: |
8566 // First string of the cons cell. | 8567 // First string of the cons cell. |
8567 inline String* first(); | 8568 inline String* first(); |
8568 // Doesn't check that the result is a string, even in debug mode. This is | 8569 // Doesn't check that the result is a string, even in debug mode. This is |
8569 // useful during GC where the mark bits confuse the checks. | 8570 // useful during GC where the mark bits confuse the checks. |
8570 inline Object* unchecked_first(); | 8571 inline Object* unchecked_first(); |
8571 inline void set_first(String* first, | 8572 inline void set_first(String* first, |
8572 WriteBarrierMode mode = UPDATE_WRITE_BARRIER); | 8573 WriteBarrierMode mode = UPDATE_WRITE_BARRIER); |
8573 | 8574 |
8574 // Second string of the cons cell. | 8575 // Second string of the cons cell. |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8608 // a substring. A Sliced String is described as a pointer to the parent, | 8609 // a substring. A Sliced String is described as a pointer to the parent, |
8609 // the offset from the start of the parent string and the length. Using | 8610 // the offset from the start of the parent string and the length. Using |
8610 // a Sliced String therefore requires unpacking of the parent string and | 8611 // a Sliced String therefore requires unpacking of the parent string and |
8611 // adding the offset to the start address. A substring of a Sliced String | 8612 // adding the offset to the start address. A substring of a Sliced String |
8612 // are not nested since the double indirection is simplified when creating | 8613 // are not nested since the double indirection is simplified when creating |
8613 // such a substring. | 8614 // such a substring. |
8614 // Currently missing features are: | 8615 // Currently missing features are: |
8615 // - handling externalized parent strings | 8616 // - handling externalized parent strings |
8616 // - external strings as parent | 8617 // - external strings as parent |
8617 // - truncating sliced string to enable otherwise unneeded parent to be GC'ed. | 8618 // - truncating sliced string to enable otherwise unneeded parent to be GC'ed. |
8618 class SlicedString FINAL : public String { | 8619 class SlicedString V8_FINAL : public String { |
8619 public: | 8620 public: |
8620 inline String* parent(); | 8621 inline String* parent(); |
8621 inline void set_parent(String* parent, | 8622 inline void set_parent(String* parent, |
8622 WriteBarrierMode mode = UPDATE_WRITE_BARRIER); | 8623 WriteBarrierMode mode = UPDATE_WRITE_BARRIER); |
8623 inline int offset(); | 8624 inline int offset(); |
8624 inline void set_offset(int offset); | 8625 inline void set_offset(int offset); |
8625 | 8626 |
8626 // Dispatched behavior. | 8627 // Dispatched behavior. |
8627 uint16_t SlicedStringGet(int index); | 8628 uint16_t SlicedStringGet(int index); |
8628 | 8629 |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8676 | 8677 |
8677 STATIC_CHECK(kResourceOffset == Internals::kStringResourceOffset); | 8678 STATIC_CHECK(kResourceOffset == Internals::kStringResourceOffset); |
8678 | 8679 |
8679 private: | 8680 private: |
8680 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalString); | 8681 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalString); |
8681 }; | 8682 }; |
8682 | 8683 |
8683 | 8684 |
8684 // The ExternalAsciiString class is an external string backed by an | 8685 // The ExternalAsciiString class is an external string backed by an |
8685 // ASCII string. | 8686 // ASCII string. |
8686 class ExternalAsciiString FINAL : public ExternalString { | 8687 class ExternalAsciiString V8_FINAL : public ExternalString { |
8687 public: | 8688 public: |
8688 static const bool kHasAsciiEncoding = true; | 8689 static const bool kHasAsciiEncoding = true; |
8689 | 8690 |
8690 typedef v8::String::ExternalAsciiStringResource Resource; | 8691 typedef v8::String::ExternalAsciiStringResource Resource; |
8691 | 8692 |
8692 // The underlying resource. | 8693 // The underlying resource. |
8693 inline const Resource* resource(); | 8694 inline const Resource* resource(); |
8694 inline void set_resource(const Resource* buffer); | 8695 inline void set_resource(const Resource* buffer); |
8695 | 8696 |
8696 // Update the pointer cache to the external character array. | 8697 // Update the pointer cache to the external character array. |
(...skipping 16 matching lines...) Expand all Loading... |
8713 template<typename StaticVisitor> | 8714 template<typename StaticVisitor> |
8714 inline void ExternalAsciiStringIterateBody(); | 8715 inline void ExternalAsciiStringIterateBody(); |
8715 | 8716 |
8716 private: | 8717 private: |
8717 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalAsciiString); | 8718 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalAsciiString); |
8718 }; | 8719 }; |
8719 | 8720 |
8720 | 8721 |
8721 // The ExternalTwoByteString class is an external string backed by a UTF-16 | 8722 // The ExternalTwoByteString class is an external string backed by a UTF-16 |
8722 // encoded string. | 8723 // encoded string. |
8723 class ExternalTwoByteString FINAL : public ExternalString { | 8724 class ExternalTwoByteString V8_FINAL : public ExternalString { |
8724 public: | 8725 public: |
8725 static const bool kHasAsciiEncoding = false; | 8726 static const bool kHasAsciiEncoding = false; |
8726 | 8727 |
8727 typedef v8::String::ExternalStringResource Resource; | 8728 typedef v8::String::ExternalStringResource Resource; |
8728 | 8729 |
8729 // The underlying string resource. | 8730 // The underlying string resource. |
8730 inline const Resource* resource(); | 8731 inline const Resource* resource(); |
8731 inline void set_resource(const Resource* buffer); | 8732 inline void set_resource(const Resource* buffer); |
8732 | 8733 |
8733 // Update the pointer cache to the external character array. | 8734 // Update the pointer cache to the external character array. |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8777 static char* Iterate(ObjectVisitor* v, char* t); | 8778 static char* Iterate(ObjectVisitor* v, char* t); |
8778 private: | 8779 private: |
8779 Isolate* isolate_; | 8780 Isolate* isolate_; |
8780 Relocatable* prev_; | 8781 Relocatable* prev_; |
8781 }; | 8782 }; |
8782 | 8783 |
8783 | 8784 |
8784 // A flat string reader provides random access to the contents of a | 8785 // A flat string reader provides random access to the contents of a |
8785 // string independent of the character width of the string. The handle | 8786 // string independent of the character width of the string. The handle |
8786 // must be valid as long as the reader is being used. | 8787 // must be valid as long as the reader is being used. |
8787 class FlatStringReader FINAL : public Relocatable { | 8788 class FlatStringReader V8_FINAL : public Relocatable { |
8788 public: | 8789 public: |
8789 FlatStringReader(Isolate* isolate, Handle<String> str); | 8790 FlatStringReader(Isolate* isolate, Handle<String> str); |
8790 FlatStringReader(Isolate* isolate, Vector<const char> input); | 8791 FlatStringReader(Isolate* isolate, Vector<const char> input); |
8791 void PostGarbageCollection(); | 8792 void PostGarbageCollection(); |
8792 inline uc32 Get(int index); | 8793 inline uc32 Get(int index); |
8793 int length() { return length_; } | 8794 int length() { return length_; } |
8794 private: | 8795 private: |
8795 String** str_; | 8796 String** str_; |
8796 bool is_ascii_; | 8797 bool is_ascii_; |
8797 int length_; | 8798 int length_; |
8798 const void* start_; | 8799 const void* start_; |
8799 }; | 8800 }; |
8800 | 8801 |
8801 | 8802 |
8802 // A ConsStringOp that returns null. | 8803 // A ConsStringOp that returns null. |
8803 // Useful when the operation to apply on a ConsString | 8804 // Useful when the operation to apply on a ConsString |
8804 // requires an expensive data structure. | 8805 // requires an expensive data structure. |
8805 class ConsStringNullOp FINAL { | 8806 class ConsStringNullOp V8_FINAL { |
8806 public: | 8807 public: |
8807 inline ConsStringNullOp() {} | 8808 inline ConsStringNullOp() {} |
8808 static inline String* Operate(String*, unsigned*, int32_t*, unsigned*); | 8809 static inline String* Operate(String*, unsigned*, int32_t*, unsigned*); |
8809 private: | 8810 private: |
8810 DISALLOW_COPY_AND_ASSIGN(ConsStringNullOp); | 8811 DISALLOW_COPY_AND_ASSIGN(ConsStringNullOp); |
8811 }; | 8812 }; |
8812 | 8813 |
8813 | 8814 |
8814 // This maintains an off-stack representation of the stack frames required | 8815 // This maintains an off-stack representation of the stack frames required |
8815 // to traverse a ConsString, allowing an entirely iterative and restartable | 8816 // to traverse a ConsString, allowing an entirely iterative and restartable |
8816 // traversal of the entire string | 8817 // traversal of the entire string |
8817 // Note: this class is not GC-safe. | 8818 // Note: this class is not GC-safe. |
8818 class ConsStringIteratorOp FINAL { | 8819 class ConsStringIteratorOp V8_FINAL { |
8819 public: | 8820 public: |
8820 inline ConsStringIteratorOp() {} | 8821 inline ConsStringIteratorOp() {} |
8821 String* Operate(String* string, | 8822 String* Operate(String* string, |
8822 unsigned* offset_out, | 8823 unsigned* offset_out, |
8823 int32_t* type_out, | 8824 int32_t* type_out, |
8824 unsigned* length_out); | 8825 unsigned* length_out); |
8825 inline String* ContinueOperation(int32_t* type_out, unsigned* length_out); | 8826 inline String* ContinueOperation(int32_t* type_out, unsigned* length_out); |
8826 inline void Reset(); | 8827 inline void Reset(); |
8827 inline bool HasMore(); | 8828 inline bool HasMore(); |
8828 | 8829 |
(...skipping 19 matching lines...) Expand all Loading... |
8848 // Stack must always contain only frames for which right traversal | 8849 // Stack must always contain only frames for which right traversal |
8849 // has not yet been performed. | 8850 // has not yet been performed. |
8850 ConsString* frames_[kStackSize]; | 8851 ConsString* frames_[kStackSize]; |
8851 unsigned consumed_; | 8852 unsigned consumed_; |
8852 ConsString* root_; | 8853 ConsString* root_; |
8853 DISALLOW_COPY_AND_ASSIGN(ConsStringIteratorOp); | 8854 DISALLOW_COPY_AND_ASSIGN(ConsStringIteratorOp); |
8854 }; | 8855 }; |
8855 | 8856 |
8856 | 8857 |
8857 // Note: this class is not GC-safe. | 8858 // Note: this class is not GC-safe. |
8858 class StringCharacterStream FINAL { | 8859 class StringCharacterStream V8_FINAL { |
8859 public: | 8860 public: |
8860 inline StringCharacterStream(String* string, | 8861 inline StringCharacterStream(String* string, |
8861 ConsStringIteratorOp* op, | 8862 ConsStringIteratorOp* op, |
8862 unsigned offset = 0); | 8863 unsigned offset = 0); |
8863 inline uint16_t GetNext(); | 8864 inline uint16_t GetNext(); |
8864 inline bool HasMore(); | 8865 inline bool HasMore(); |
8865 inline void Reset(String* string, unsigned offset = 0); | 8866 inline void Reset(String* string, unsigned offset = 0); |
8866 inline void VisitOneByteString(const uint8_t* chars, unsigned length); | 8867 inline void VisitOneByteString(const uint8_t* chars, unsigned length); |
8867 inline void VisitTwoByteString(const uint16_t* chars, unsigned length); | 8868 inline void VisitTwoByteString(const uint16_t* chars, unsigned length); |
8868 | 8869 |
8869 private: | 8870 private: |
8870 bool is_one_byte_; | 8871 bool is_one_byte_; |
8871 union { | 8872 union { |
8872 const uint8_t* buffer8_; | 8873 const uint8_t* buffer8_; |
8873 const uint16_t* buffer16_; | 8874 const uint16_t* buffer16_; |
8874 }; | 8875 }; |
8875 const uint8_t* end_; | 8876 const uint8_t* end_; |
8876 ConsStringIteratorOp* op_; | 8877 ConsStringIteratorOp* op_; |
8877 DISALLOW_COPY_AND_ASSIGN(StringCharacterStream); | 8878 DISALLOW_COPY_AND_ASSIGN(StringCharacterStream); |
8878 }; | 8879 }; |
8879 | 8880 |
8880 | 8881 |
8881 template <typename T> | 8882 template <typename T> |
8882 class VectorIterator FINAL { | 8883 class VectorIterator V8_FINAL { |
8883 public: | 8884 public: |
8884 VectorIterator(T* d, int l) : data_(Vector<const T>(d, l)), index_(0) { } | 8885 VectorIterator(T* d, int l) : data_(Vector<const T>(d, l)), index_(0) { } |
8885 explicit VectorIterator(Vector<const T> data) : data_(data), index_(0) { } | 8886 explicit VectorIterator(Vector<const T> data) : data_(data), index_(0) { } |
8886 T GetNext() { return data_[index_++]; } | 8887 T GetNext() { return data_[index_++]; } |
8887 bool has_more() { return index_ < data_.length(); } | 8888 bool has_more() { return index_ < data_.length(); } |
8888 private: | 8889 private: |
8889 Vector<const T> data_; | 8890 Vector<const T> data_; |
8890 int index_; | 8891 int index_; |
8891 }; | 8892 }; |
8892 | 8893 |
8893 | 8894 |
8894 // The Oddball describes objects null, undefined, true, and false. | 8895 // The Oddball describes objects null, undefined, true, and false. |
8895 class Oddball FINAL : public HeapObject { | 8896 class Oddball V8_FINAL : public HeapObject { |
8896 public: | 8897 public: |
8897 // [to_string]: Cached to_string computed at startup. | 8898 // [to_string]: Cached to_string computed at startup. |
8898 DECL_ACCESSORS(to_string, String) | 8899 DECL_ACCESSORS(to_string, String) |
8899 | 8900 |
8900 // [to_number]: Cached to_number computed at startup. | 8901 // [to_number]: Cached to_number computed at startup. |
8901 DECL_ACCESSORS(to_number, Object) | 8902 DECL_ACCESSORS(to_number, Object) |
8902 | 8903 |
8903 inline byte kind(); | 8904 inline byte kind(); |
8904 inline void set_kind(byte kind); | 8905 inline void set_kind(byte kind); |
8905 | 8906 |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8971 | 8972 |
8972 typedef FixedBodyDescriptor<kValueOffset, | 8973 typedef FixedBodyDescriptor<kValueOffset, |
8973 kValueOffset + kPointerSize, | 8974 kValueOffset + kPointerSize, |
8974 kSize> BodyDescriptor; | 8975 kSize> BodyDescriptor; |
8975 | 8976 |
8976 private: | 8977 private: |
8977 DISALLOW_IMPLICIT_CONSTRUCTORS(Cell); | 8978 DISALLOW_IMPLICIT_CONSTRUCTORS(Cell); |
8978 }; | 8979 }; |
8979 | 8980 |
8980 | 8981 |
8981 class PropertyCell FINAL : public Cell { | 8982 class PropertyCell V8_FINAL : public Cell { |
8982 public: | 8983 public: |
8983 // [type]: type of the global property. | 8984 // [type]: type of the global property. |
8984 Type* type(); | 8985 Type* type(); |
8985 void set_type(Type* value, WriteBarrierMode mode = UPDATE_WRITE_BARRIER); | 8986 void set_type(Type* value, WriteBarrierMode mode = UPDATE_WRITE_BARRIER); |
8986 | 8987 |
8987 // [dependent_code]: dependent code that depends on the type of the global | 8988 // [dependent_code]: dependent code that depends on the type of the global |
8988 // property. | 8989 // property. |
8989 DECL_ACCESSORS(dependent_code, DependentCode) | 8990 DECL_ACCESSORS(dependent_code, DependentCode) |
8990 | 8991 |
8991 // Sets the value of the cell and updates the type field to be the union | 8992 // Sets the value of the cell and updates the type field to be the union |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9127 Handle<Name> name, | 9128 Handle<Name> name, |
9128 DeleteMode mode); | 9129 DeleteMode mode); |
9129 static Handle<Object> DeleteElementWithHandler(Handle<JSProxy> object, | 9130 static Handle<Object> DeleteElementWithHandler(Handle<JSProxy> object, |
9130 uint32_t index, | 9131 uint32_t index, |
9131 DeleteMode mode); | 9132 DeleteMode mode); |
9132 | 9133 |
9133 DISALLOW_IMPLICIT_CONSTRUCTORS(JSProxy); | 9134 DISALLOW_IMPLICIT_CONSTRUCTORS(JSProxy); |
9134 }; | 9135 }; |
9135 | 9136 |
9136 | 9137 |
9137 class JSFunctionProxy FINAL : public JSProxy { | 9138 class JSFunctionProxy V8_FINAL : public JSProxy { |
9138 public: | 9139 public: |
9139 // [call_trap]: The call trap. | 9140 // [call_trap]: The call trap. |
9140 DECL_ACCESSORS(call_trap, Object) | 9141 DECL_ACCESSORS(call_trap, Object) |
9141 | 9142 |
9142 // [construct_trap]: The construct trap. | 9143 // [construct_trap]: The construct trap. |
9143 DECL_ACCESSORS(construct_trap, Object) | 9144 DECL_ACCESSORS(construct_trap, Object) |
9144 | 9145 |
9145 // Casting. | 9146 // Casting. |
9146 static inline JSFunctionProxy* cast(Object* obj); | 9147 static inline JSFunctionProxy* cast(Object* obj); |
9147 | 9148 |
(...skipping 13 matching lines...) Expand all Loading... |
9161 typedef FixedBodyDescriptor<kHandlerOffset, | 9162 typedef FixedBodyDescriptor<kHandlerOffset, |
9162 kConstructTrapOffset + kPointerSize, | 9163 kConstructTrapOffset + kPointerSize, |
9163 kSize> BodyDescriptor; | 9164 kSize> BodyDescriptor; |
9164 | 9165 |
9165 private: | 9166 private: |
9166 DISALLOW_IMPLICIT_CONSTRUCTORS(JSFunctionProxy); | 9167 DISALLOW_IMPLICIT_CONSTRUCTORS(JSFunctionProxy); |
9167 }; | 9168 }; |
9168 | 9169 |
9169 | 9170 |
9170 // The JSSet describes EcmaScript Harmony sets | 9171 // The JSSet describes EcmaScript Harmony sets |
9171 class JSSet FINAL : public JSObject { | 9172 class JSSet V8_FINAL : public JSObject { |
9172 public: | 9173 public: |
9173 // [set]: the backing hash set containing keys. | 9174 // [set]: the backing hash set containing keys. |
9174 DECL_ACCESSORS(table, Object) | 9175 DECL_ACCESSORS(table, Object) |
9175 | 9176 |
9176 // Casting. | 9177 // Casting. |
9177 static inline JSSet* cast(Object* obj); | 9178 static inline JSSet* cast(Object* obj); |
9178 | 9179 |
9179 // Dispatched behavior. | 9180 // Dispatched behavior. |
9180 DECLARE_PRINTER(JSSet) | 9181 DECLARE_PRINTER(JSSet) |
9181 DECLARE_VERIFIER(JSSet) | 9182 DECLARE_VERIFIER(JSSet) |
9182 | 9183 |
9183 static const int kTableOffset = JSObject::kHeaderSize; | 9184 static const int kTableOffset = JSObject::kHeaderSize; |
9184 static const int kSize = kTableOffset + kPointerSize; | 9185 static const int kSize = kTableOffset + kPointerSize; |
9185 | 9186 |
9186 private: | 9187 private: |
9187 DISALLOW_IMPLICIT_CONSTRUCTORS(JSSet); | 9188 DISALLOW_IMPLICIT_CONSTRUCTORS(JSSet); |
9188 }; | 9189 }; |
9189 | 9190 |
9190 | 9191 |
9191 // The JSMap describes EcmaScript Harmony maps | 9192 // The JSMap describes EcmaScript Harmony maps |
9192 class JSMap FINAL : public JSObject { | 9193 class JSMap V8_FINAL : public JSObject { |
9193 public: | 9194 public: |
9194 // [table]: the backing hash table mapping keys to values. | 9195 // [table]: the backing hash table mapping keys to values. |
9195 DECL_ACCESSORS(table, Object) | 9196 DECL_ACCESSORS(table, Object) |
9196 | 9197 |
9197 // Casting. | 9198 // Casting. |
9198 static inline JSMap* cast(Object* obj); | 9199 static inline JSMap* cast(Object* obj); |
9199 | 9200 |
9200 // Dispatched behavior. | 9201 // Dispatched behavior. |
9201 DECLARE_PRINTER(JSMap) | 9202 DECLARE_PRINTER(JSMap) |
9202 DECLARE_VERIFIER(JSMap) | 9203 DECLARE_VERIFIER(JSMap) |
(...skipping 18 matching lines...) Expand all Loading... |
9221 static const int kTableOffset = JSObject::kHeaderSize; | 9222 static const int kTableOffset = JSObject::kHeaderSize; |
9222 static const int kNextOffset = kTableOffset + kPointerSize; | 9223 static const int kNextOffset = kTableOffset + kPointerSize; |
9223 static const int kSize = kNextOffset + kPointerSize; | 9224 static const int kSize = kNextOffset + kPointerSize; |
9224 | 9225 |
9225 private: | 9226 private: |
9226 DISALLOW_IMPLICIT_CONSTRUCTORS(JSWeakCollection); | 9227 DISALLOW_IMPLICIT_CONSTRUCTORS(JSWeakCollection); |
9227 }; | 9228 }; |
9228 | 9229 |
9229 | 9230 |
9230 // The JSWeakMap describes EcmaScript Harmony weak maps | 9231 // The JSWeakMap describes EcmaScript Harmony weak maps |
9231 class JSWeakMap FINAL : public JSWeakCollection { | 9232 class JSWeakMap V8_FINAL : public JSWeakCollection { |
9232 public: | 9233 public: |
9233 // Casting. | 9234 // Casting. |
9234 static inline JSWeakMap* cast(Object* obj); | 9235 static inline JSWeakMap* cast(Object* obj); |
9235 | 9236 |
9236 // Dispatched behavior. | 9237 // Dispatched behavior. |
9237 DECLARE_PRINTER(JSWeakMap) | 9238 DECLARE_PRINTER(JSWeakMap) |
9238 DECLARE_VERIFIER(JSWeakMap) | 9239 DECLARE_VERIFIER(JSWeakMap) |
9239 | 9240 |
9240 private: | 9241 private: |
9241 DISALLOW_IMPLICIT_CONSTRUCTORS(JSWeakMap); | 9242 DISALLOW_IMPLICIT_CONSTRUCTORS(JSWeakMap); |
9242 }; | 9243 }; |
9243 | 9244 |
9244 | 9245 |
9245 // The JSWeakSet describes EcmaScript Harmony weak sets | 9246 // The JSWeakSet describes EcmaScript Harmony weak sets |
9246 class JSWeakSet FINAL : public JSWeakCollection { | 9247 class JSWeakSet V8_FINAL : public JSWeakCollection { |
9247 public: | 9248 public: |
9248 // Casting. | 9249 // Casting. |
9249 static inline JSWeakSet* cast(Object* obj); | 9250 static inline JSWeakSet* cast(Object* obj); |
9250 | 9251 |
9251 // Dispatched behavior. | 9252 // Dispatched behavior. |
9252 DECLARE_PRINTER(JSWeakSet) | 9253 DECLARE_PRINTER(JSWeakSet) |
9253 DECLARE_VERIFIER(JSWeakSet) | 9254 DECLARE_VERIFIER(JSWeakSet) |
9254 | 9255 |
9255 private: | 9256 private: |
9256 DISALLOW_IMPLICIT_CONSTRUCTORS(JSWeakSet); | 9257 DISALLOW_IMPLICIT_CONSTRUCTORS(JSWeakSet); |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9331 static const int kViewSize = kWeakNextOffset + kPointerSize; | 9332 static const int kViewSize = kWeakNextOffset + kPointerSize; |
9332 | 9333 |
9333 protected: | 9334 protected: |
9334 void NeuterView(); | 9335 void NeuterView(); |
9335 | 9336 |
9336 private: | 9337 private: |
9337 DISALLOW_IMPLICIT_CONSTRUCTORS(JSArrayBufferView); | 9338 DISALLOW_IMPLICIT_CONSTRUCTORS(JSArrayBufferView); |
9338 }; | 9339 }; |
9339 | 9340 |
9340 | 9341 |
9341 class JSTypedArray FINAL : public JSArrayBufferView { | 9342 class JSTypedArray V8_FINAL : public JSArrayBufferView { |
9342 public: | 9343 public: |
9343 // [length]: length of typed array in elements. | 9344 // [length]: length of typed array in elements. |
9344 DECL_ACCESSORS(length, Object) | 9345 DECL_ACCESSORS(length, Object) |
9345 | 9346 |
9346 // Neutering. Only neuters this typed array. | 9347 // Neutering. Only neuters this typed array. |
9347 void Neuter(); | 9348 void Neuter(); |
9348 | 9349 |
9349 // Casting. | 9350 // Casting. |
9350 static inline JSTypedArray* cast(Object* obj); | 9351 static inline JSTypedArray* cast(Object* obj); |
9351 | 9352 |
9352 ExternalArrayType type(); | 9353 ExternalArrayType type(); |
9353 size_t element_size(); | 9354 size_t element_size(); |
9354 | 9355 |
9355 // Dispatched behavior. | 9356 // Dispatched behavior. |
9356 DECLARE_PRINTER(JSTypedArray) | 9357 DECLARE_PRINTER(JSTypedArray) |
9357 DECLARE_VERIFIER(JSTypedArray) | 9358 DECLARE_VERIFIER(JSTypedArray) |
9358 | 9359 |
9359 static const int kLengthOffset = kViewSize + kPointerSize; | 9360 static const int kLengthOffset = kViewSize + kPointerSize; |
9360 static const int kSize = kLengthOffset + kPointerSize; | 9361 static const int kSize = kLengthOffset + kPointerSize; |
9361 | 9362 |
9362 static const int kSizeWithInternalFields = | 9363 static const int kSizeWithInternalFields = |
9363 kSize + v8::ArrayBufferView::kInternalFieldCount * kPointerSize; | 9364 kSize + v8::ArrayBufferView::kInternalFieldCount * kPointerSize; |
9364 | 9365 |
9365 private: | 9366 private: |
9366 DISALLOW_IMPLICIT_CONSTRUCTORS(JSTypedArray); | 9367 DISALLOW_IMPLICIT_CONSTRUCTORS(JSTypedArray); |
9367 }; | 9368 }; |
9368 | 9369 |
9369 | 9370 |
9370 class JSDataView FINAL : public JSArrayBufferView { | 9371 class JSDataView V8_FINAL : public JSArrayBufferView { |
9371 public: | 9372 public: |
9372 // Only neuters this DataView | 9373 // Only neuters this DataView |
9373 void Neuter(); | 9374 void Neuter(); |
9374 | 9375 |
9375 // Casting. | 9376 // Casting. |
9376 static inline JSDataView* cast(Object* obj); | 9377 static inline JSDataView* cast(Object* obj); |
9377 | 9378 |
9378 // Dispatched behavior. | 9379 // Dispatched behavior. |
9379 DECLARE_PRINTER(JSDataView) | 9380 DECLARE_PRINTER(JSDataView) |
9380 DECLARE_VERIFIER(JSDataView) | 9381 DECLARE_VERIFIER(JSDataView) |
9381 | 9382 |
9382 static const int kSize = kViewSize; | 9383 static const int kSize = kViewSize; |
9383 | 9384 |
9384 static const int kSizeWithInternalFields = | 9385 static const int kSizeWithInternalFields = |
9385 kSize + v8::ArrayBufferView::kInternalFieldCount * kPointerSize; | 9386 kSize + v8::ArrayBufferView::kInternalFieldCount * kPointerSize; |
9386 | 9387 |
9387 private: | 9388 private: |
9388 DISALLOW_IMPLICIT_CONSTRUCTORS(JSDataView); | 9389 DISALLOW_IMPLICIT_CONSTRUCTORS(JSDataView); |
9389 }; | 9390 }; |
9390 | 9391 |
9391 | 9392 |
9392 // Foreign describes objects pointing from JavaScript to C structures. | 9393 // Foreign describes objects pointing from JavaScript to C structures. |
9393 // Since they cannot contain references to JS HeapObjects they can be | 9394 // Since they cannot contain references to JS HeapObjects they can be |
9394 // placed in old_data_space. | 9395 // placed in old_data_space. |
9395 class Foreign FINAL : public HeapObject { | 9396 class Foreign V8_FINAL : public HeapObject { |
9396 public: | 9397 public: |
9397 // [address]: field containing the address. | 9398 // [address]: field containing the address. |
9398 inline Address foreign_address(); | 9399 inline Address foreign_address(); |
9399 inline void set_foreign_address(Address value); | 9400 inline void set_foreign_address(Address value); |
9400 | 9401 |
9401 // Casting. | 9402 // Casting. |
9402 static inline Foreign* cast(Object* obj); | 9403 static inline Foreign* cast(Object* obj); |
9403 | 9404 |
9404 // Dispatched behavior. | 9405 // Dispatched behavior. |
9405 inline void ForeignIterateBody(ObjectVisitor* v); | 9406 inline void ForeignIterateBody(ObjectVisitor* v); |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9483 Handle<Object> CacheInitialJSArrayMaps(Handle<Context> native_context, | 9484 Handle<Object> CacheInitialJSArrayMaps(Handle<Context> native_context, |
9484 Handle<Map> initial_map); | 9485 Handle<Map> initial_map); |
9485 | 9486 |
9486 | 9487 |
9487 // JSRegExpResult is just a JSArray with a specific initial map. | 9488 // JSRegExpResult is just a JSArray with a specific initial map. |
9488 // This initial map adds in-object properties for "index" and "input" | 9489 // This initial map adds in-object properties for "index" and "input" |
9489 // properties, as assigned by RegExp.prototype.exec, which allows | 9490 // properties, as assigned by RegExp.prototype.exec, which allows |
9490 // faster creation of RegExp exec results. | 9491 // faster creation of RegExp exec results. |
9491 // This class just holds constants used when creating the result. | 9492 // This class just holds constants used when creating the result. |
9492 // After creation the result must be treated as a JSArray in all regards. | 9493 // After creation the result must be treated as a JSArray in all regards. |
9493 class JSRegExpResult FINAL : public JSArray { | 9494 class JSRegExpResult V8_FINAL : public JSArray { |
9494 public: | 9495 public: |
9495 // Offsets of object fields. | 9496 // Offsets of object fields. |
9496 static const int kIndexOffset = JSArray::kSize; | 9497 static const int kIndexOffset = JSArray::kSize; |
9497 static const int kInputOffset = kIndexOffset + kPointerSize; | 9498 static const int kInputOffset = kIndexOffset + kPointerSize; |
9498 static const int kSize = kInputOffset + kPointerSize; | 9499 static const int kSize = kInputOffset + kPointerSize; |
9499 // Indices of in-object properties. | 9500 // Indices of in-object properties. |
9500 static const int kIndexIndex = 0; | 9501 static const int kIndexIndex = 0; |
9501 static const int kInputIndex = 1; | 9502 static const int kInputIndex = 1; |
9502 private: | 9503 private: |
9503 DISALLOW_IMPLICIT_CONSTRUCTORS(JSRegExpResult); | 9504 DISALLOW_IMPLICIT_CONSTRUCTORS(JSRegExpResult); |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9594 struct PrimitiveValueDescriptor primitive_value_descriptor; | 9595 struct PrimitiveValueDescriptor primitive_value_descriptor; |
9595 struct ObjectDerefenceDescriptor object_dereference_descriptor; | 9596 struct ObjectDerefenceDescriptor object_dereference_descriptor; |
9596 struct PointerShiftDescriptor pointer_shift_descriptor; | 9597 struct PointerShiftDescriptor pointer_shift_descriptor; |
9597 }; | 9598 }; |
9598 }; | 9599 }; |
9599 | 9600 |
9600 | 9601 |
9601 class DeclaredAccessorDescriptor; | 9602 class DeclaredAccessorDescriptor; |
9602 | 9603 |
9603 | 9604 |
9604 class DeclaredAccessorDescriptorIterator FINAL { | 9605 class DeclaredAccessorDescriptorIterator V8_FINAL { |
9605 public: | 9606 public: |
9606 explicit DeclaredAccessorDescriptorIterator( | 9607 explicit DeclaredAccessorDescriptorIterator( |
9607 DeclaredAccessorDescriptor* descriptor); | 9608 DeclaredAccessorDescriptor* descriptor); |
9608 const DeclaredAccessorDescriptorData* Next(); | 9609 const DeclaredAccessorDescriptorData* Next(); |
9609 bool Complete() const { return length_ == offset_; } | 9610 bool Complete() const { return length_ == offset_; } |
9610 private: | 9611 private: |
9611 uint8_t* array_; | 9612 uint8_t* array_; |
9612 const int length_; | 9613 const int length_; |
9613 int offset_; | 9614 int offset_; |
9614 DISALLOW_IMPLICIT_CONSTRUCTORS(DeclaredAccessorDescriptorIterator); | 9615 DISALLOW_IMPLICIT_CONSTRUCTORS(DeclaredAccessorDescriptorIterator); |
9615 }; | 9616 }; |
9616 | 9617 |
9617 | 9618 |
9618 class DeclaredAccessorDescriptor FINAL : public Struct { | 9619 class DeclaredAccessorDescriptor V8_FINAL : public Struct { |
9619 public: | 9620 public: |
9620 DECL_ACCESSORS(serialized_data, ByteArray) | 9621 DECL_ACCESSORS(serialized_data, ByteArray) |
9621 | 9622 |
9622 static inline DeclaredAccessorDescriptor* cast(Object* obj); | 9623 static inline DeclaredAccessorDescriptor* cast(Object* obj); |
9623 | 9624 |
9624 static Handle<DeclaredAccessorDescriptor> Create( | 9625 static Handle<DeclaredAccessorDescriptor> Create( |
9625 Isolate* isolate, | 9626 Isolate* isolate, |
9626 const DeclaredAccessorDescriptorData& data, | 9627 const DeclaredAccessorDescriptorData& data, |
9627 Handle<DeclaredAccessorDescriptor> previous); | 9628 Handle<DeclaredAccessorDescriptor> previous); |
9628 | 9629 |
9629 // Dispatched behavior. | 9630 // Dispatched behavior. |
9630 DECLARE_PRINTER(DeclaredAccessorDescriptor) | 9631 DECLARE_PRINTER(DeclaredAccessorDescriptor) |
9631 DECLARE_VERIFIER(DeclaredAccessorDescriptor) | 9632 DECLARE_VERIFIER(DeclaredAccessorDescriptor) |
9632 | 9633 |
9633 static const int kSerializedDataOffset = HeapObject::kHeaderSize; | 9634 static const int kSerializedDataOffset = HeapObject::kHeaderSize; |
9634 static const int kSize = kSerializedDataOffset + kPointerSize; | 9635 static const int kSize = kSerializedDataOffset + kPointerSize; |
9635 | 9636 |
9636 private: | 9637 private: |
9637 DISALLOW_IMPLICIT_CONSTRUCTORS(DeclaredAccessorDescriptor); | 9638 DISALLOW_IMPLICIT_CONSTRUCTORS(DeclaredAccessorDescriptor); |
9638 }; | 9639 }; |
9639 | 9640 |
9640 | 9641 |
9641 class DeclaredAccessorInfo FINAL : public AccessorInfo { | 9642 class DeclaredAccessorInfo V8_FINAL : public AccessorInfo { |
9642 public: | 9643 public: |
9643 DECL_ACCESSORS(descriptor, DeclaredAccessorDescriptor) | 9644 DECL_ACCESSORS(descriptor, DeclaredAccessorDescriptor) |
9644 | 9645 |
9645 static inline DeclaredAccessorInfo* cast(Object* obj); | 9646 static inline DeclaredAccessorInfo* cast(Object* obj); |
9646 | 9647 |
9647 // Dispatched behavior. | 9648 // Dispatched behavior. |
9648 DECLARE_PRINTER(DeclaredAccessorInfo) | 9649 DECLARE_PRINTER(DeclaredAccessorInfo) |
9649 DECLARE_VERIFIER(DeclaredAccessorInfo) | 9650 DECLARE_VERIFIER(DeclaredAccessorInfo) |
9650 | 9651 |
9651 static const int kDescriptorOffset = AccessorInfo::kSize; | 9652 static const int kDescriptorOffset = AccessorInfo::kSize; |
9652 static const int kSize = kDescriptorOffset + kPointerSize; | 9653 static const int kSize = kDescriptorOffset + kPointerSize; |
9653 | 9654 |
9654 private: | 9655 private: |
9655 DISALLOW_IMPLICIT_CONSTRUCTORS(DeclaredAccessorInfo); | 9656 DISALLOW_IMPLICIT_CONSTRUCTORS(DeclaredAccessorInfo); |
9656 }; | 9657 }; |
9657 | 9658 |
9658 | 9659 |
9659 // An accessor must have a getter, but can have no setter. | 9660 // An accessor must have a getter, but can have no setter. |
9660 // | 9661 // |
9661 // When setting a property, V8 searches accessors in prototypes. | 9662 // When setting a property, V8 searches accessors in prototypes. |
9662 // If an accessor was found and it does not have a setter, | 9663 // If an accessor was found and it does not have a setter, |
9663 // the request is ignored. | 9664 // the request is ignored. |
9664 // | 9665 // |
9665 // If the accessor in the prototype has the READ_ONLY property attribute, then | 9666 // If the accessor in the prototype has the READ_ONLY property attribute, then |
9666 // a new value is added to the local object when the property is set. | 9667 // a new value is added to the local object when the property is set. |
9667 // This shadows the accessor in the prototype. | 9668 // This shadows the accessor in the prototype. |
9668 class ExecutableAccessorInfo FINAL : public AccessorInfo { | 9669 class ExecutableAccessorInfo V8_FINAL : public AccessorInfo { |
9669 public: | 9670 public: |
9670 DECL_ACCESSORS(getter, Object) | 9671 DECL_ACCESSORS(getter, Object) |
9671 DECL_ACCESSORS(setter, Object) | 9672 DECL_ACCESSORS(setter, Object) |
9672 DECL_ACCESSORS(data, Object) | 9673 DECL_ACCESSORS(data, Object) |
9673 | 9674 |
9674 static inline ExecutableAccessorInfo* cast(Object* obj); | 9675 static inline ExecutableAccessorInfo* cast(Object* obj); |
9675 | 9676 |
9676 // Dispatched behavior. | 9677 // Dispatched behavior. |
9677 DECLARE_PRINTER(ExecutableAccessorInfo) | 9678 DECLARE_PRINTER(ExecutableAccessorInfo) |
9678 DECLARE_VERIFIER(ExecutableAccessorInfo) | 9679 DECLARE_VERIFIER(ExecutableAccessorInfo) |
9679 | 9680 |
9680 static const int kGetterOffset = AccessorInfo::kSize; | 9681 static const int kGetterOffset = AccessorInfo::kSize; |
9681 static const int kSetterOffset = kGetterOffset + kPointerSize; | 9682 static const int kSetterOffset = kGetterOffset + kPointerSize; |
9682 static const int kDataOffset = kSetterOffset + kPointerSize; | 9683 static const int kDataOffset = kSetterOffset + kPointerSize; |
9683 static const int kSize = kDataOffset + kPointerSize; | 9684 static const int kSize = kDataOffset + kPointerSize; |
9684 | 9685 |
9685 private: | 9686 private: |
9686 DISALLOW_IMPLICIT_CONSTRUCTORS(ExecutableAccessorInfo); | 9687 DISALLOW_IMPLICIT_CONSTRUCTORS(ExecutableAccessorInfo); |
9687 }; | 9688 }; |
9688 | 9689 |
9689 | 9690 |
9690 // Support for JavaScript accessors: A pair of a getter and a setter. Each | 9691 // Support for JavaScript accessors: A pair of a getter and a setter. Each |
9691 // accessor can either be | 9692 // accessor can either be |
9692 // * a pointer to a JavaScript function or proxy: a real accessor | 9693 // * a pointer to a JavaScript function or proxy: a real accessor |
9693 // * undefined: considered an accessor by the spec, too, strangely enough | 9694 // * undefined: considered an accessor by the spec, too, strangely enough |
9694 // * the hole: an accessor which has not been set | 9695 // * the hole: an accessor which has not been set |
9695 // * a pointer to a map: a transition used to ensure map sharing | 9696 // * a pointer to a map: a transition used to ensure map sharing |
9696 class AccessorPair FINAL : public Struct { | 9697 class AccessorPair V8_FINAL : public Struct { |
9697 public: | 9698 public: |
9698 DECL_ACCESSORS(getter, Object) | 9699 DECL_ACCESSORS(getter, Object) |
9699 DECL_ACCESSORS(setter, Object) | 9700 DECL_ACCESSORS(setter, Object) |
9700 | 9701 |
9701 static inline AccessorPair* cast(Object* obj); | 9702 static inline AccessorPair* cast(Object* obj); |
9702 | 9703 |
9703 static Handle<AccessorPair> Copy(Handle<AccessorPair> pair); | 9704 static Handle<AccessorPair> Copy(Handle<AccessorPair> pair); |
9704 | 9705 |
9705 Object* get(AccessorComponent component) { | 9706 Object* get(AccessorComponent component) { |
9706 return component == ACCESSOR_GETTER ? getter() : setter(); | 9707 return component == ACCESSOR_GETTER ? getter() : setter(); |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9742 // Object.defineProperty(obj, "foo", {get: undefined}); | 9743 // Object.defineProperty(obj, "foo", {get: undefined}); |
9743 // assertTrue("foo" in obj); | 9744 // assertTrue("foo" in obj); |
9744 bool IsJSAccessor(Object* obj) { | 9745 bool IsJSAccessor(Object* obj) { |
9745 return obj->IsSpecFunction() || obj->IsUndefined(); | 9746 return obj->IsSpecFunction() || obj->IsUndefined(); |
9746 } | 9747 } |
9747 | 9748 |
9748 DISALLOW_IMPLICIT_CONSTRUCTORS(AccessorPair); | 9749 DISALLOW_IMPLICIT_CONSTRUCTORS(AccessorPair); |
9749 }; | 9750 }; |
9750 | 9751 |
9751 | 9752 |
9752 class AccessCheckInfo FINAL : public Struct { | 9753 class AccessCheckInfo V8_FINAL : public Struct { |
9753 public: | 9754 public: |
9754 DECL_ACCESSORS(named_callback, Object) | 9755 DECL_ACCESSORS(named_callback, Object) |
9755 DECL_ACCESSORS(indexed_callback, Object) | 9756 DECL_ACCESSORS(indexed_callback, Object) |
9756 DECL_ACCESSORS(data, Object) | 9757 DECL_ACCESSORS(data, Object) |
9757 | 9758 |
9758 static inline AccessCheckInfo* cast(Object* obj); | 9759 static inline AccessCheckInfo* cast(Object* obj); |
9759 | 9760 |
9760 // Dispatched behavior. | 9761 // Dispatched behavior. |
9761 DECLARE_PRINTER(AccessCheckInfo) | 9762 DECLARE_PRINTER(AccessCheckInfo) |
9762 DECLARE_VERIFIER(AccessCheckInfo) | 9763 DECLARE_VERIFIER(AccessCheckInfo) |
9763 | 9764 |
9764 static const int kNamedCallbackOffset = HeapObject::kHeaderSize; | 9765 static const int kNamedCallbackOffset = HeapObject::kHeaderSize; |
9765 static const int kIndexedCallbackOffset = kNamedCallbackOffset + kPointerSize; | 9766 static const int kIndexedCallbackOffset = kNamedCallbackOffset + kPointerSize; |
9766 static const int kDataOffset = kIndexedCallbackOffset + kPointerSize; | 9767 static const int kDataOffset = kIndexedCallbackOffset + kPointerSize; |
9767 static const int kSize = kDataOffset + kPointerSize; | 9768 static const int kSize = kDataOffset + kPointerSize; |
9768 | 9769 |
9769 private: | 9770 private: |
9770 DISALLOW_IMPLICIT_CONSTRUCTORS(AccessCheckInfo); | 9771 DISALLOW_IMPLICIT_CONSTRUCTORS(AccessCheckInfo); |
9771 }; | 9772 }; |
9772 | 9773 |
9773 | 9774 |
9774 class InterceptorInfo FINAL : public Struct { | 9775 class InterceptorInfo V8_FINAL : public Struct { |
9775 public: | 9776 public: |
9776 DECL_ACCESSORS(getter, Object) | 9777 DECL_ACCESSORS(getter, Object) |
9777 DECL_ACCESSORS(setter, Object) | 9778 DECL_ACCESSORS(setter, Object) |
9778 DECL_ACCESSORS(query, Object) | 9779 DECL_ACCESSORS(query, Object) |
9779 DECL_ACCESSORS(deleter, Object) | 9780 DECL_ACCESSORS(deleter, Object) |
9780 DECL_ACCESSORS(enumerator, Object) | 9781 DECL_ACCESSORS(enumerator, Object) |
9781 DECL_ACCESSORS(data, Object) | 9782 DECL_ACCESSORS(data, Object) |
9782 | 9783 |
9783 static inline InterceptorInfo* cast(Object* obj); | 9784 static inline InterceptorInfo* cast(Object* obj); |
9784 | 9785 |
9785 // Dispatched behavior. | 9786 // Dispatched behavior. |
9786 DECLARE_PRINTER(InterceptorInfo) | 9787 DECLARE_PRINTER(InterceptorInfo) |
9787 DECLARE_VERIFIER(InterceptorInfo) | 9788 DECLARE_VERIFIER(InterceptorInfo) |
9788 | 9789 |
9789 static const int kGetterOffset = HeapObject::kHeaderSize; | 9790 static const int kGetterOffset = HeapObject::kHeaderSize; |
9790 static const int kSetterOffset = kGetterOffset + kPointerSize; | 9791 static const int kSetterOffset = kGetterOffset + kPointerSize; |
9791 static const int kQueryOffset = kSetterOffset + kPointerSize; | 9792 static const int kQueryOffset = kSetterOffset + kPointerSize; |
9792 static const int kDeleterOffset = kQueryOffset + kPointerSize; | 9793 static const int kDeleterOffset = kQueryOffset + kPointerSize; |
9793 static const int kEnumeratorOffset = kDeleterOffset + kPointerSize; | 9794 static const int kEnumeratorOffset = kDeleterOffset + kPointerSize; |
9794 static const int kDataOffset = kEnumeratorOffset + kPointerSize; | 9795 static const int kDataOffset = kEnumeratorOffset + kPointerSize; |
9795 static const int kSize = kDataOffset + kPointerSize; | 9796 static const int kSize = kDataOffset + kPointerSize; |
9796 | 9797 |
9797 private: | 9798 private: |
9798 DISALLOW_IMPLICIT_CONSTRUCTORS(InterceptorInfo); | 9799 DISALLOW_IMPLICIT_CONSTRUCTORS(InterceptorInfo); |
9799 }; | 9800 }; |
9800 | 9801 |
9801 | 9802 |
9802 class CallHandlerInfo FINAL : public Struct { | 9803 class CallHandlerInfo V8_FINAL : public Struct { |
9803 public: | 9804 public: |
9804 DECL_ACCESSORS(callback, Object) | 9805 DECL_ACCESSORS(callback, Object) |
9805 DECL_ACCESSORS(data, Object) | 9806 DECL_ACCESSORS(data, Object) |
9806 | 9807 |
9807 static inline CallHandlerInfo* cast(Object* obj); | 9808 static inline CallHandlerInfo* cast(Object* obj); |
9808 | 9809 |
9809 // Dispatched behavior. | 9810 // Dispatched behavior. |
9810 DECLARE_PRINTER(CallHandlerInfo) | 9811 DECLARE_PRINTER(CallHandlerInfo) |
9811 DECLARE_VERIFIER(CallHandlerInfo) | 9812 DECLARE_VERIFIER(CallHandlerInfo) |
9812 | 9813 |
(...skipping 15 matching lines...) Expand all Loading... |
9828 | 9829 |
9829 static const int kTagOffset = HeapObject::kHeaderSize; | 9830 static const int kTagOffset = HeapObject::kHeaderSize; |
9830 static const int kPropertyListOffset = kTagOffset + kPointerSize; | 9831 static const int kPropertyListOffset = kTagOffset + kPointerSize; |
9831 static const int kHeaderSize = kPropertyListOffset + kPointerSize; | 9832 static const int kHeaderSize = kPropertyListOffset + kPointerSize; |
9832 | 9833 |
9833 private: | 9834 private: |
9834 DISALLOW_IMPLICIT_CONSTRUCTORS(TemplateInfo); | 9835 DISALLOW_IMPLICIT_CONSTRUCTORS(TemplateInfo); |
9835 }; | 9836 }; |
9836 | 9837 |
9837 | 9838 |
9838 class FunctionTemplateInfo FINAL : public TemplateInfo { | 9839 class FunctionTemplateInfo V8_FINAL : public TemplateInfo { |
9839 public: | 9840 public: |
9840 DECL_ACCESSORS(serial_number, Object) | 9841 DECL_ACCESSORS(serial_number, Object) |
9841 DECL_ACCESSORS(call_code, Object) | 9842 DECL_ACCESSORS(call_code, Object) |
9842 DECL_ACCESSORS(property_accessors, Object) | 9843 DECL_ACCESSORS(property_accessors, Object) |
9843 DECL_ACCESSORS(prototype_template, Object) | 9844 DECL_ACCESSORS(prototype_template, Object) |
9844 DECL_ACCESSORS(parent_template, Object) | 9845 DECL_ACCESSORS(parent_template, Object) |
9845 DECL_ACCESSORS(named_property_handler, Object) | 9846 DECL_ACCESSORS(named_property_handler, Object) |
9846 DECL_ACCESSORS(indexed_property_handler, Object) | 9847 DECL_ACCESSORS(indexed_property_handler, Object) |
9847 DECL_ACCESSORS(instance_template, Object) | 9848 DECL_ACCESSORS(instance_template, Object) |
9848 DECL_ACCESSORS(class_name, Object) | 9849 DECL_ACCESSORS(class_name, Object) |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9894 // Bit position in the flag, from least significant bit position. | 9895 // Bit position in the flag, from least significant bit position. |
9895 static const int kHiddenPrototypeBit = 0; | 9896 static const int kHiddenPrototypeBit = 0; |
9896 static const int kUndetectableBit = 1; | 9897 static const int kUndetectableBit = 1; |
9897 static const int kNeedsAccessCheckBit = 2; | 9898 static const int kNeedsAccessCheckBit = 2; |
9898 static const int kReadOnlyPrototypeBit = 3; | 9899 static const int kReadOnlyPrototypeBit = 3; |
9899 | 9900 |
9900 DISALLOW_IMPLICIT_CONSTRUCTORS(FunctionTemplateInfo); | 9901 DISALLOW_IMPLICIT_CONSTRUCTORS(FunctionTemplateInfo); |
9901 }; | 9902 }; |
9902 | 9903 |
9903 | 9904 |
9904 class ObjectTemplateInfo FINAL : public TemplateInfo { | 9905 class ObjectTemplateInfo V8_FINAL : public TemplateInfo { |
9905 public: | 9906 public: |
9906 DECL_ACCESSORS(constructor, Object) | 9907 DECL_ACCESSORS(constructor, Object) |
9907 DECL_ACCESSORS(internal_field_count, Object) | 9908 DECL_ACCESSORS(internal_field_count, Object) |
9908 | 9909 |
9909 static inline ObjectTemplateInfo* cast(Object* obj); | 9910 static inline ObjectTemplateInfo* cast(Object* obj); |
9910 | 9911 |
9911 // Dispatched behavior. | 9912 // Dispatched behavior. |
9912 DECLARE_PRINTER(ObjectTemplateInfo) | 9913 DECLARE_PRINTER(ObjectTemplateInfo) |
9913 DECLARE_VERIFIER(ObjectTemplateInfo) | 9914 DECLARE_VERIFIER(ObjectTemplateInfo) |
9914 | 9915 |
9915 static const int kConstructorOffset = TemplateInfo::kHeaderSize; | 9916 static const int kConstructorOffset = TemplateInfo::kHeaderSize; |
9916 static const int kInternalFieldCountOffset = | 9917 static const int kInternalFieldCountOffset = |
9917 kConstructorOffset + kPointerSize; | 9918 kConstructorOffset + kPointerSize; |
9918 static const int kSize = kInternalFieldCountOffset + kPointerSize; | 9919 static const int kSize = kInternalFieldCountOffset + kPointerSize; |
9919 }; | 9920 }; |
9920 | 9921 |
9921 | 9922 |
9922 class SignatureInfo FINAL : public Struct { | 9923 class SignatureInfo V8_FINAL : public Struct { |
9923 public: | 9924 public: |
9924 DECL_ACCESSORS(receiver, Object) | 9925 DECL_ACCESSORS(receiver, Object) |
9925 DECL_ACCESSORS(args, Object) | 9926 DECL_ACCESSORS(args, Object) |
9926 | 9927 |
9927 static inline SignatureInfo* cast(Object* obj); | 9928 static inline SignatureInfo* cast(Object* obj); |
9928 | 9929 |
9929 // Dispatched behavior. | 9930 // Dispatched behavior. |
9930 DECLARE_PRINTER(SignatureInfo) | 9931 DECLARE_PRINTER(SignatureInfo) |
9931 DECLARE_VERIFIER(SignatureInfo) | 9932 DECLARE_VERIFIER(SignatureInfo) |
9932 | 9933 |
9933 static const int kReceiverOffset = Struct::kHeaderSize; | 9934 static const int kReceiverOffset = Struct::kHeaderSize; |
9934 static const int kArgsOffset = kReceiverOffset + kPointerSize; | 9935 static const int kArgsOffset = kReceiverOffset + kPointerSize; |
9935 static const int kSize = kArgsOffset + kPointerSize; | 9936 static const int kSize = kArgsOffset + kPointerSize; |
9936 | 9937 |
9937 private: | 9938 private: |
9938 DISALLOW_IMPLICIT_CONSTRUCTORS(SignatureInfo); | 9939 DISALLOW_IMPLICIT_CONSTRUCTORS(SignatureInfo); |
9939 }; | 9940 }; |
9940 | 9941 |
9941 | 9942 |
9942 class TypeSwitchInfo FINAL : public Struct { | 9943 class TypeSwitchInfo V8_FINAL : public Struct { |
9943 public: | 9944 public: |
9944 DECL_ACCESSORS(types, Object) | 9945 DECL_ACCESSORS(types, Object) |
9945 | 9946 |
9946 static inline TypeSwitchInfo* cast(Object* obj); | 9947 static inline TypeSwitchInfo* cast(Object* obj); |
9947 | 9948 |
9948 // Dispatched behavior. | 9949 // Dispatched behavior. |
9949 DECLARE_PRINTER(TypeSwitchInfo) | 9950 DECLARE_PRINTER(TypeSwitchInfo) |
9950 DECLARE_VERIFIER(TypeSwitchInfo) | 9951 DECLARE_VERIFIER(TypeSwitchInfo) |
9951 | 9952 |
9952 static const int kTypesOffset = Struct::kHeaderSize; | 9953 static const int kTypesOffset = Struct::kHeaderSize; |
9953 static const int kSize = kTypesOffset + kPointerSize; | 9954 static const int kSize = kTypesOffset + kPointerSize; |
9954 }; | 9955 }; |
9955 | 9956 |
9956 | 9957 |
9957 #ifdef ENABLE_DEBUGGER_SUPPORT | 9958 #ifdef ENABLE_DEBUGGER_SUPPORT |
9958 // The DebugInfo class holds additional information for a function being | 9959 // The DebugInfo class holds additional information for a function being |
9959 // debugged. | 9960 // debugged. |
9960 class DebugInfo FINAL : public Struct { | 9961 class DebugInfo V8_FINAL : public Struct { |
9961 public: | 9962 public: |
9962 // The shared function info for the source being debugged. | 9963 // The shared function info for the source being debugged. |
9963 DECL_ACCESSORS(shared, SharedFunctionInfo) | 9964 DECL_ACCESSORS(shared, SharedFunctionInfo) |
9964 // Code object for the original code. | 9965 // Code object for the original code. |
9965 DECL_ACCESSORS(original_code, Code) | 9966 DECL_ACCESSORS(original_code, Code) |
9966 // Code object for the patched code. This code object is the code object | 9967 // Code object for the patched code. This code object is the code object |
9967 // currently active for the function. | 9968 // currently active for the function. |
9968 DECL_ACCESSORS(code, Code) | 9969 DECL_ACCESSORS(code, Code) |
9969 // Fixed array holding status information for each active break point. | 9970 // Fixed array holding status information for each active break point. |
9970 DECL_ACCESSORS(break_points, FixedArray) | 9971 DECL_ACCESSORS(break_points, FixedArray) |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10010 // Lookup the index in the break_points array for a code position. | 10011 // Lookup the index in the break_points array for a code position. |
10011 int GetBreakPointInfoIndex(int code_position); | 10012 int GetBreakPointInfoIndex(int code_position); |
10012 | 10013 |
10013 DISALLOW_IMPLICIT_CONSTRUCTORS(DebugInfo); | 10014 DISALLOW_IMPLICIT_CONSTRUCTORS(DebugInfo); |
10014 }; | 10015 }; |
10015 | 10016 |
10016 | 10017 |
10017 // The BreakPointInfo class holds information for break points set in a | 10018 // The BreakPointInfo class holds information for break points set in a |
10018 // function. The DebugInfo object holds a BreakPointInfo object for each code | 10019 // function. The DebugInfo object holds a BreakPointInfo object for each code |
10019 // position with one or more break points. | 10020 // position with one or more break points. |
10020 class BreakPointInfo FINAL : public Struct { | 10021 class BreakPointInfo V8_FINAL : public Struct { |
10021 public: | 10022 public: |
10022 // The position in the code for the break point. | 10023 // The position in the code for the break point. |
10023 DECL_ACCESSORS(code_position, Smi) | 10024 DECL_ACCESSORS(code_position, Smi) |
10024 // The position in the source for the break position. | 10025 // The position in the source for the break position. |
10025 DECL_ACCESSORS(source_position, Smi) | 10026 DECL_ACCESSORS(source_position, Smi) |
10026 // The position in the source for the last statement before this break | 10027 // The position in the source for the last statement before this break |
10027 // position. | 10028 // position. |
10028 DECL_ACCESSORS(statement_position, Smi) | 10029 DECL_ACCESSORS(statement_position, Smi) |
10029 // List of related JavaScript break points. | 10030 // List of related JavaScript break points. |
10030 DECL_ACCESSORS(break_point_objects, Object) | 10031 DECL_ACCESSORS(break_point_objects, Object) |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10075 V(kRelocatable, "relocatable", "(Relocatable)") \ | 10076 V(kRelocatable, "relocatable", "(Relocatable)") \ |
10076 V(kDebug, "debug", "(Debugger)") \ | 10077 V(kDebug, "debug", "(Debugger)") \ |
10077 V(kCompilationCache, "compilationcache", "(Compilation cache)") \ | 10078 V(kCompilationCache, "compilationcache", "(Compilation cache)") \ |
10078 V(kHandleScope, "handlescope", "(Handle scope)") \ | 10079 V(kHandleScope, "handlescope", "(Handle scope)") \ |
10079 V(kBuiltins, "builtins", "(Builtins)") \ | 10080 V(kBuiltins, "builtins", "(Builtins)") \ |
10080 V(kGlobalHandles, "globalhandles", "(Global handles)") \ | 10081 V(kGlobalHandles, "globalhandles", "(Global handles)") \ |
10081 V(kEternalHandles, "eternalhandles", "(Eternal handles)") \ | 10082 V(kEternalHandles, "eternalhandles", "(Eternal handles)") \ |
10082 V(kThreadManager, "threadmanager", "(Thread manager)") \ | 10083 V(kThreadManager, "threadmanager", "(Thread manager)") \ |
10083 V(kExtensions, "Extensions", "(Extensions)") | 10084 V(kExtensions, "Extensions", "(Extensions)") |
10084 | 10085 |
10085 class VisitorSynchronization FINAL : public AllStatic { | 10086 class VisitorSynchronization V8_FINAL : public AllStatic { |
10086 public: | 10087 public: |
10087 #define DECLARE_ENUM(enum_item, ignore1, ignore2) enum_item, | 10088 #define DECLARE_ENUM(enum_item, ignore1, ignore2) enum_item, |
10088 enum SyncTag { | 10089 enum SyncTag { |
10089 VISITOR_SYNCHRONIZATION_TAGS_LIST(DECLARE_ENUM) | 10090 VISITOR_SYNCHRONIZATION_TAGS_LIST(DECLARE_ENUM) |
10090 kNumberOfSyncTags | 10091 kNumberOfSyncTags |
10091 }; | 10092 }; |
10092 #undef DECLARE_ENUM | 10093 #undef DECLARE_ENUM |
10093 | 10094 |
10094 static const char* const kTags[kNumberOfSyncTags]; | 10095 static const char* const kTags[kNumberOfSyncTags]; |
10095 static const char* const kTagNames[kNumberOfSyncTags]; | 10096 static const char* const kTagNames[kNumberOfSyncTags]; |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10153 // Visits a handle that has an embedder-assigned class ID. | 10154 // Visits a handle that has an embedder-assigned class ID. |
10154 virtual void VisitEmbedderReference(Object** p, uint16_t class_id) {} | 10155 virtual void VisitEmbedderReference(Object** p, uint16_t class_id) {} |
10155 | 10156 |
10156 // Intended for serialization/deserialization checking: insert, or | 10157 // Intended for serialization/deserialization checking: insert, or |
10157 // check for the presence of, a tag at this position in the stream. | 10158 // check for the presence of, a tag at this position in the stream. |
10158 // Also used for marking up GC roots in heap snapshots. | 10159 // Also used for marking up GC roots in heap snapshots. |
10159 virtual void Synchronize(VisitorSynchronization::SyncTag tag) {} | 10160 virtual void Synchronize(VisitorSynchronization::SyncTag tag) {} |
10160 }; | 10161 }; |
10161 | 10162 |
10162 | 10163 |
10163 class StructBodyDescriptor FINAL : public | 10164 class StructBodyDescriptor V8_FINAL : public |
10164 FlexibleBodyDescriptor<HeapObject::kHeaderSize> { | 10165 FlexibleBodyDescriptor<HeapObject::kHeaderSize> { |
10165 public: | 10166 public: |
10166 static inline int SizeOf(Map* map, HeapObject* object) { | 10167 static inline int SizeOf(Map* map, HeapObject* object) { |
10167 return map->instance_size(); | 10168 return map->instance_size(); |
10168 } | 10169 } |
10169 }; | 10170 }; |
10170 | 10171 |
10171 | 10172 |
10172 // BooleanBit is a helper class for setting and getting a bit in an | 10173 // BooleanBit is a helper class for setting and getting a bit in an |
10173 // integer or Smi. | 10174 // integer or Smi. |
10174 class BooleanBit FINAL : public AllStatic { | 10175 class BooleanBit V8_FINAL : public AllStatic { |
10175 public: | 10176 public: |
10176 static inline bool get(Smi* smi, int bit_position) { | 10177 static inline bool get(Smi* smi, int bit_position) { |
10177 return get(smi->value(), bit_position); | 10178 return get(smi->value(), bit_position); |
10178 } | 10179 } |
10179 | 10180 |
10180 static inline bool get(int value, int bit_position) { | 10181 static inline bool get(int value, int bit_position) { |
10181 return (value & (1 << bit_position)) != 0; | 10182 return (value & (1 << bit_position)) != 0; |
10182 } | 10183 } |
10183 | 10184 |
10184 static inline Smi* set(Smi* smi, int bit_position, bool v) { | 10185 static inline Smi* set(Smi* smi, int bit_position, bool v) { |
10185 return Smi::FromInt(set(smi->value(), bit_position, v)); | 10186 return Smi::FromInt(set(smi->value(), bit_position, v)); |
10186 } | 10187 } |
10187 | 10188 |
10188 static inline int set(int value, int bit_position, bool v) { | 10189 static inline int set(int value, int bit_position, bool v) { |
10189 if (v) { | 10190 if (v) { |
10190 value |= (1 << bit_position); | 10191 value |= (1 << bit_position); |
10191 } else { | 10192 } else { |
10192 value &= ~(1 << bit_position); | 10193 value &= ~(1 << bit_position); |
10193 } | 10194 } |
10194 return value; | 10195 return value; |
10195 } | 10196 } |
10196 }; | 10197 }; |
10197 | 10198 |
10198 } } // namespace v8::internal | 10199 } } // namespace v8::internal |
10199 | 10200 |
10200 #endif // V8_OBJECTS_H_ | 10201 #endif // V8_OBJECTS_H_ |
OLD | NEW |