Chromium Code Reviews| 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 2084 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2095 inline bool HasExternalByteElements(); | 2095 inline bool HasExternalByteElements(); |
| 2096 inline bool HasExternalUnsignedByteElements(); | 2096 inline bool HasExternalUnsignedByteElements(); |
| 2097 inline bool HasExternalShortElements(); | 2097 inline bool HasExternalShortElements(); |
| 2098 inline bool HasExternalUnsignedShortElements(); | 2098 inline bool HasExternalUnsignedShortElements(); |
| 2099 inline bool HasExternalIntElements(); | 2099 inline bool HasExternalIntElements(); |
| 2100 inline bool HasExternalUnsignedIntElements(); | 2100 inline bool HasExternalUnsignedIntElements(); |
| 2101 inline bool HasExternalFloatElements(); | 2101 inline bool HasExternalFloatElements(); |
| 2102 inline bool HasExternalDoubleElements(); | 2102 inline bool HasExternalDoubleElements(); |
| 2103 bool HasFastArgumentsElements(); | 2103 bool HasFastArgumentsElements(); |
| 2104 bool HasDictionaryArgumentsElements(); | 2104 bool HasDictionaryArgumentsElements(); |
| 2105 inline bool HasNonStrictArgumentsElementsMap(); | |
| 2105 inline SeededNumberDictionary* element_dictionary(); // Gets slow elements. | 2106 inline SeededNumberDictionary* element_dictionary(); // Gets slow elements. |
| 2106 | 2107 |
| 2108 // Gets elements from the appropriate location if a normal object or a | |
| 2109 // non-strict arguments object. | |
| 2110 inline FixedArrayBase* GetElements(); | |
|
danno
2013/10/30 12:17:45
Why is elements() not sufficient here?
| |
| 2111 | |
| 2107 inline bool ShouldTrackAllocationInfo(); | 2112 inline bool ShouldTrackAllocationInfo(); |
| 2108 | 2113 |
| 2109 inline void set_map_and_elements( | 2114 inline void set_map_and_elements( |
| 2110 Map* map, | 2115 Map* map, |
| 2111 FixedArrayBase* value, | 2116 FixedArrayBase* value, |
| 2112 WriteBarrierMode mode = UPDATE_WRITE_BARRIER); | 2117 WriteBarrierMode mode = UPDATE_WRITE_BARRIER); |
| 2113 | 2118 |
| 2114 // Requires: HasFastElements(). | 2119 // Requires: HasFastElements(). |
| 2115 MUST_USE_RESULT inline MaybeObject* EnsureWritableFastElements(); | 2120 MUST_USE_RESULT inline MaybeObject* EnsureWritableFastElements(); |
| 2116 | 2121 |
| (...skipping 373 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2490 PropertyNormalizationMode mode, | 2495 PropertyNormalizationMode mode, |
| 2491 int expected_additional_properties); | 2496 int expected_additional_properties); |
| 2492 | 2497 |
| 2493 // Convert and update the elements backing store to be a | 2498 // Convert and update the elements backing store to be a |
| 2494 // SeededNumberDictionary dictionary. Returns the backing after conversion. | 2499 // SeededNumberDictionary dictionary. Returns the backing after conversion. |
| 2495 static Handle<SeededNumberDictionary> NormalizeElements( | 2500 static Handle<SeededNumberDictionary> NormalizeElements( |
| 2496 Handle<JSObject> object); | 2501 Handle<JSObject> object); |
| 2497 | 2502 |
| 2498 MUST_USE_RESULT MaybeObject* NormalizeElements(); | 2503 MUST_USE_RESULT MaybeObject* NormalizeElements(); |
| 2499 | 2504 |
| 2505 // Convert the elements backing store as a SeededNumberDictionary dictionary. | |
| 2506 // Precondition: the elements aren't already a dictionary. | |
| 2507 // Does not set the new elements in the object. | |
| 2508 static Handle<SeededNumberDictionary> CreateNormalizedElements( | |
| 2509 Handle<JSObject> object); | |
| 2510 | |
| 2511 MUST_USE_RESULT MaybeObject* CreateNormalizedElements(); | |
| 2512 | |
| 2500 // Transform slow named properties to fast variants. | 2513 // Transform slow named properties to fast variants. |
| 2501 static void TransformToFastProperties(Handle<JSObject> object, | 2514 static void TransformToFastProperties(Handle<JSObject> object, |
| 2502 int unused_property_fields); | 2515 int unused_property_fields); |
| 2503 | 2516 |
| 2504 // Access fast-case object properties at index. | 2517 // Access fast-case object properties at index. |
| 2505 MUST_USE_RESULT inline MaybeObject* FastPropertyAt( | 2518 MUST_USE_RESULT inline MaybeObject* FastPropertyAt( |
| 2506 Representation representation, | 2519 Representation representation, |
| 2507 int index); | 2520 int index); |
| 2508 inline Object* RawFastPropertyAt(int index); | 2521 inline Object* RawFastPropertyAt(int index); |
| 2509 inline void FastPropertyAtPut(int index, Object* value); | 2522 inline void FastPropertyAtPut(int index, Object* value); |
| (...skipping 2781 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 5291 int CodeSize() { return SizeFor(body_size()); } | 5304 int CodeSize() { return SizeFor(body_size()); } |
| 5292 inline void CodeIterateBody(ObjectVisitor* v); | 5305 inline void CodeIterateBody(ObjectVisitor* v); |
| 5293 | 5306 |
| 5294 template<typename StaticVisitor> | 5307 template<typename StaticVisitor> |
| 5295 inline void CodeIterateBody(Heap* heap); | 5308 inline void CodeIterateBody(Heap* heap); |
| 5296 | 5309 |
| 5297 DECLARE_PRINTER(Code) | 5310 DECLARE_PRINTER(Code) |
| 5298 DECLARE_VERIFIER(Code) | 5311 DECLARE_VERIFIER(Code) |
| 5299 | 5312 |
| 5300 void ClearInlineCaches(); | 5313 void ClearInlineCaches(); |
| 5314 void ClearInlineCaches(Kind* kind); | |
|
danno
2013/10/30 12:17:45
Shouldn't this one be private?
mvstanton
2013/10/30 18:22:28
Done.
| |
| 5315 void ClearInlineCaches(Kind kind); | |
| 5316 | |
| 5301 void ClearTypeFeedbackCells(Heap* heap); | 5317 void ClearTypeFeedbackCells(Heap* heap); |
| 5302 | 5318 |
| 5303 BailoutId TranslatePcOffsetToAstId(uint32_t pc_offset); | 5319 BailoutId TranslatePcOffsetToAstId(uint32_t pc_offset); |
| 5304 | 5320 |
| 5305 #define DECLARE_CODE_AGE_ENUM(X) k##X##CodeAge, | 5321 #define DECLARE_CODE_AGE_ENUM(X) k##X##CodeAge, |
| 5306 enum Age { | 5322 enum Age { |
| 5307 kNotExecutedCodeAge = -2, | 5323 kNotExecutedCodeAge = -2, |
| 5308 kExecutedOnceCodeAge = -1, | 5324 kExecutedOnceCodeAge = -1, |
| 5309 kNoAgeCodeAge = 0, | 5325 kNoAgeCodeAge = 0, |
| 5310 CODE_AGE_LIST(DECLARE_CODE_AGE_ENUM) | 5326 CODE_AGE_LIST(DECLARE_CODE_AGE_ENUM) |
| (...skipping 312 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 5623 class IsShared: public BitField<bool, 22, 1> {}; | 5639 class IsShared: public BitField<bool, 22, 1> {}; |
| 5624 class FunctionWithPrototype: public BitField<bool, 23, 1> {}; | 5640 class FunctionWithPrototype: public BitField<bool, 23, 1> {}; |
| 5625 class DictionaryMap: public BitField<bool, 24, 1> {}; | 5641 class DictionaryMap: public BitField<bool, 24, 1> {}; |
| 5626 class OwnsDescriptors: public BitField<bool, 25, 1> {}; | 5642 class OwnsDescriptors: public BitField<bool, 25, 1> {}; |
| 5627 class IsObserved: public BitField<bool, 26, 1> {}; | 5643 class IsObserved: public BitField<bool, 26, 1> {}; |
| 5628 class Deprecated: public BitField<bool, 27, 1> {}; | 5644 class Deprecated: public BitField<bool, 27, 1> {}; |
| 5629 class IsFrozen: public BitField<bool, 28, 1> {}; | 5645 class IsFrozen: public BitField<bool, 28, 1> {}; |
| 5630 class IsUnstable: public BitField<bool, 29, 1> {}; | 5646 class IsUnstable: public BitField<bool, 29, 1> {}; |
| 5631 class IsMigrationTarget: public BitField<bool, 30, 1> {}; | 5647 class IsMigrationTarget: public BitField<bool, 30, 1> {}; |
| 5632 | 5648 |
| 5649 // Bit field 4. | |
| 5650 inline uint32_t bit_field4(); | |
| 5651 inline void set_bit_field4(uint32_t bits); | |
| 5652 | |
| 5653 class HasElementCallbacks: public BitField<int, 0, 1> {}; | |
| 5654 | |
| 5655 inline void set_has_element_callbacks(bool value); | |
| 5656 inline bool has_element_callbacks(); | |
| 5657 | |
| 5633 // Tells whether the object in the prototype property will be used | 5658 // Tells whether the object in the prototype property will be used |
| 5634 // for instances created from this function. If the prototype | 5659 // for instances created from this function. If the prototype |
| 5635 // property is set to a value that is not a JSObject, the prototype | 5660 // property is set to a value that is not a JSObject, the prototype |
| 5636 // property will not be used to create instances of the function. | 5661 // property will not be used to create instances of the function. |
| 5637 // See ECMA-262, 13.2.2. | 5662 // See ECMA-262, 13.2.2. |
| 5638 inline void set_non_instance_prototype(bool value); | 5663 inline void set_non_instance_prototype(bool value); |
| 5639 inline bool has_non_instance_prototype(); | 5664 inline bool has_non_instance_prototype(); |
| 5640 | 5665 |
| 5641 // Tells whether function has special prototype property. If not, prototype | 5666 // Tells whether function has special prototype property. If not, prototype |
| 5642 // property will not be created when accessed (will return undefined), | 5667 // property will not be created when accessed (will return undefined), |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 5757 static bool IsValidElementsTransition(ElementsKind from_kind, | 5782 static bool IsValidElementsTransition(ElementsKind from_kind, |
| 5758 ElementsKind to_kind); | 5783 ElementsKind to_kind); |
| 5759 | 5784 |
| 5760 inline bool HasTransitionArray(); | 5785 inline bool HasTransitionArray(); |
| 5761 inline bool HasElementsTransition(); | 5786 inline bool HasElementsTransition(); |
| 5762 inline Map* elements_transition_map(); | 5787 inline Map* elements_transition_map(); |
| 5763 MUST_USE_RESULT inline MaybeObject* set_elements_transition_map( | 5788 MUST_USE_RESULT inline MaybeObject* set_elements_transition_map( |
| 5764 Map* transitioned_map); | 5789 Map* transitioned_map); |
| 5765 inline void SetTransition(int transition_index, Map* target); | 5790 inline void SetTransition(int transition_index, Map* target); |
| 5766 inline Map* GetTransition(int transition_index); | 5791 inline Map* GetTransition(int transition_index); |
| 5767 | |
| 5768 static Handle<TransitionArray> AddTransition(Handle<Map> map, | 5792 static Handle<TransitionArray> AddTransition(Handle<Map> map, |
| 5769 Handle<Name> key, | 5793 Handle<Name> key, |
| 5770 Handle<Map> target, | 5794 Handle<Map> target, |
| 5771 SimpleTransitionFlag flag); | 5795 SimpleTransitionFlag flag); |
| 5772 | 5796 |
| 5773 MUST_USE_RESULT inline MaybeObject* AddTransition(Name* key, | 5797 MUST_USE_RESULT inline MaybeObject* AddTransition(Name* key, |
| 5774 Map* target, | 5798 Map* target, |
| 5775 SimpleTransitionFlag flag); | 5799 SimpleTransitionFlag flag); |
| 5800 inline bool HasElementCallbacksTransition(); | |
| 5801 inline Map* element_callbacks_map(); | |
| 5802 MUST_USE_RESULT inline MaybeObject* set_element_callbacks_map( | |
| 5803 Map* callbacks_map); | |
| 5804 | |
| 5776 DECL_ACCESSORS(transitions, TransitionArray) | 5805 DECL_ACCESSORS(transitions, TransitionArray) |
| 5777 inline void ClearTransitions(Heap* heap, | 5806 inline void ClearTransitions(Heap* heap, |
| 5778 WriteBarrierMode mode = UPDATE_WRITE_BARRIER); | 5807 WriteBarrierMode mode = UPDATE_WRITE_BARRIER); |
| 5779 | 5808 |
| 5780 void DeprecateTransitionTree(); | 5809 void DeprecateTransitionTree(); |
| 5781 void DeprecateTarget(Name* key, DescriptorArray* new_descriptors); | 5810 void DeprecateTarget(Name* key, DescriptorArray* new_descriptors); |
| 5782 | 5811 |
| 5783 Map* FindRootMap(); | 5812 Map* FindRootMap(); |
| 5784 Map* FindUpdatedMap(int verbatim, int length, DescriptorArray* descriptors); | 5813 Map* FindUpdatedMap(int verbatim, int length, DescriptorArray* descriptors); |
| 5785 Map* FindLastMatchMap(int verbatim, int length, DescriptorArray* descriptors); | 5814 Map* FindLastMatchMap(int verbatim, int length, DescriptorArray* descriptors); |
| 5786 | 5815 |
| 5787 int NumberOfFields(); | 5816 int NumberOfFields(); |
| 5788 | 5817 |
| 5818 bool MayHaveIndexedCallbacksInPrototypeChain(); | |
| 5819 | |
| 5789 bool InstancesNeedRewriting(Map* target, | 5820 bool InstancesNeedRewriting(Map* target, |
| 5790 int target_number_of_fields, | 5821 int target_number_of_fields, |
| 5791 int target_inobject, | 5822 int target_inobject, |
| 5792 int target_unused); | 5823 int target_unused); |
| 5793 static Handle<Map> GeneralizeAllFieldRepresentations( | 5824 static Handle<Map> GeneralizeAllFieldRepresentations( |
| 5794 Handle<Map> map, | 5825 Handle<Map> map, |
| 5795 Representation new_representation); | 5826 Representation new_representation); |
| 5796 static Handle<Map> GeneralizeRepresentation( | 5827 static Handle<Map> GeneralizeRepresentation( |
| 5797 Handle<Map> map, | 5828 Handle<Map> map, |
| 5798 int modify_index, | 5829 int modify_index, |
| (...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 5996 TransitionFlag flag); | 6027 TransitionFlag flag); |
| 5997 MUST_USE_RESULT MaybeObject* CopyReplaceDescriptor( | 6028 MUST_USE_RESULT MaybeObject* CopyReplaceDescriptor( |
| 5998 DescriptorArray* descriptors, | 6029 DescriptorArray* descriptors, |
| 5999 Descriptor* descriptor, | 6030 Descriptor* descriptor, |
| 6000 int index, | 6031 int index, |
| 6001 TransitionFlag flag); | 6032 TransitionFlag flag); |
| 6002 MUST_USE_RESULT MaybeObject* AsElementsKind(ElementsKind kind); | 6033 MUST_USE_RESULT MaybeObject* AsElementsKind(ElementsKind kind); |
| 6003 | 6034 |
| 6004 MUST_USE_RESULT MaybeObject* CopyAsElementsKind(ElementsKind kind, | 6035 MUST_USE_RESULT MaybeObject* CopyAsElementsKind(ElementsKind kind, |
| 6005 TransitionFlag flag); | 6036 TransitionFlag flag); |
| 6037 MUST_USE_RESULT MaybeObject* CopyAsElementCallbacksTransition( | |
| 6038 bool with_dictionary_elements); | |
| 6039 static Handle<Map> CopyAsElementCallbacksTransition( | |
| 6040 Handle<Map> map, bool with_dictionary_elements); | |
| 6006 | 6041 |
| 6007 static Handle<Map> CopyForObserved(Handle<Map> map); | 6042 static Handle<Map> CopyForObserved(Handle<Map> map); |
| 6008 | 6043 |
| 6009 static Handle<Map> CopyNormalized(Handle<Map> map, | 6044 static Handle<Map> CopyNormalized(Handle<Map> map, |
| 6010 PropertyNormalizationMode mode, | 6045 PropertyNormalizationMode mode, |
| 6011 NormalizedMapSharingMode sharing); | 6046 NormalizedMapSharingMode sharing); |
| 6012 | 6047 |
| 6013 inline void AppendDescriptor(Descriptor* desc, | 6048 inline void AppendDescriptor(Descriptor* desc, |
| 6014 const DescriptorArray::WhitenessWitness&); | 6049 const DescriptorArray::WhitenessWitness&); |
| 6015 | 6050 |
| (...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 6173 // pointer if unused. When the map has transitions, the back pointer is | 6208 // pointer if unused. When the map has transitions, the back pointer is |
| 6174 // transferred to the transition array and accessed through an extra | 6209 // transferred to the transition array and accessed through an extra |
| 6175 // indirection. | 6210 // indirection. |
| 6176 static const int kTransitionsOrBackPointerOffset = | 6211 static const int kTransitionsOrBackPointerOffset = |
| 6177 kConstructorOffset + kPointerSize; | 6212 kConstructorOffset + kPointerSize; |
| 6178 static const int kDescriptorsOffset = | 6213 static const int kDescriptorsOffset = |
| 6179 kTransitionsOrBackPointerOffset + kPointerSize; | 6214 kTransitionsOrBackPointerOffset + kPointerSize; |
| 6180 static const int kCodeCacheOffset = kDescriptorsOffset + kPointerSize; | 6215 static const int kCodeCacheOffset = kDescriptorsOffset + kPointerSize; |
| 6181 static const int kDependentCodeOffset = kCodeCacheOffset + kPointerSize; | 6216 static const int kDependentCodeOffset = kCodeCacheOffset + kPointerSize; |
| 6182 static const int kBitField3Offset = kDependentCodeOffset + kPointerSize; | 6217 static const int kBitField3Offset = kDependentCodeOffset + kPointerSize; |
| 6183 static const int kSize = kBitField3Offset + kPointerSize; | 6218 static const int kBitField4Offset = kBitField3Offset + kPointerSize; |
| 6219 static const int kSize = kBitField4Offset + kPointerSize; | |
| 6184 | 6220 |
| 6185 // Layout of pointer fields. Heap iteration code relies on them | 6221 // Layout of pointer fields. Heap iteration code relies on them |
| 6186 // being continuously allocated. | 6222 // being continuously allocated. |
| 6187 static const int kPointerFieldsBeginOffset = Map::kPrototypeOffset; | 6223 static const int kPointerFieldsBeginOffset = Map::kPrototypeOffset; |
| 6188 static const int kPointerFieldsEndOffset = kBitField3Offset + kPointerSize; | 6224 static const int kPointerFieldsEndOffset = kBitField3Offset + kPointerSize; |
| 6189 | 6225 |
| 6190 // Byte offsets within kInstanceSizesOffset. | 6226 // Byte offsets within kInstanceSizesOffset. |
| 6191 static const int kInstanceSizeOffset = kInstanceSizesOffset + 0; | 6227 static const int kInstanceSizeOffset = kInstanceSizesOffset + 0; |
| 6192 static const int kInObjectPropertiesByte = 1; | 6228 static const int kInObjectPropertiesByte = 1; |
| 6193 static const int kInObjectPropertiesOffset = | 6229 static const int kInObjectPropertiesOffset = |
| (...skipping 4238 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 10432 } else { | 10468 } else { |
| 10433 value &= ~(1 << bit_position); | 10469 value &= ~(1 << bit_position); |
| 10434 } | 10470 } |
| 10435 return value; | 10471 return value; |
| 10436 } | 10472 } |
| 10437 }; | 10473 }; |
| 10438 | 10474 |
| 10439 } } // namespace v8::internal | 10475 } } // namespace v8::internal |
| 10440 | 10476 |
| 10441 #endif // V8_OBJECTS_H_ | 10477 #endif // V8_OBJECTS_H_ |
| OLD | NEW |