OLD | NEW |
---|---|
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef V8_OBJECTS_H_ | 5 #ifndef V8_OBJECTS_H_ |
6 #define V8_OBJECTS_H_ | 6 #define V8_OBJECTS_H_ |
7 | 7 |
8 #include <iosfwd> | 8 #include <iosfwd> |
9 | 9 |
10 #include "src/allocation.h" | 10 #include "src/allocation.h" |
(...skipping 2088 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2099 Object* pre_allocated_value, | 2099 Object* pre_allocated_value, |
2100 Object* filler_value); | 2100 Object* filler_value); |
2101 | 2101 |
2102 // Check whether this object references another object | 2102 // Check whether this object references another object |
2103 bool ReferencesObject(Object* obj); | 2103 bool ReferencesObject(Object* obj); |
2104 | 2104 |
2105 // Disalow further properties to be added to the object. | 2105 // Disalow further properties to be added to the object. |
2106 MUST_USE_RESULT static MaybeHandle<Object> PreventExtensions( | 2106 MUST_USE_RESULT static MaybeHandle<Object> PreventExtensions( |
2107 Handle<JSObject> object); | 2107 Handle<JSObject> object); |
2108 | 2108 |
2109 // ES5 Object.seal | |
2110 MUST_USE_RESULT static MaybeHandle<Object> Seal(Handle<JSObject> object); | |
2111 | |
2109 // ES5 Object.freeze | 2112 // ES5 Object.freeze |
2110 MUST_USE_RESULT static MaybeHandle<Object> Freeze(Handle<JSObject> object); | 2113 MUST_USE_RESULT static MaybeHandle<Object> Freeze(Handle<JSObject> object); |
2111 | 2114 |
2112 // Called the first time an object is observed with ES7 Object.observe. | 2115 // Called the first time an object is observed with ES7 Object.observe. |
2113 static void SetObserved(Handle<JSObject> object); | 2116 static void SetObserved(Handle<JSObject> object); |
2114 | 2117 |
2115 // Copy object. | 2118 // Copy object. |
2116 enum DeepCopyHints { kNoHints = 0, kObjectIsShallow = 1 }; | 2119 enum DeepCopyHints { kNoHints = 0, kObjectIsShallow = 1 }; |
2117 | 2120 |
2118 static Handle<JSObject> Copy(Handle<JSObject> object); | 2121 static Handle<JSObject> Copy(Handle<JSObject> object); |
(...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2386 // Set the hidden property backing store to either a hash table or | 2389 // Set the hidden property backing store to either a hash table or |
2387 // the inline-stored identity hash. | 2390 // the inline-stored identity hash. |
2388 static Handle<Object> SetHiddenPropertiesHashTable( | 2391 static Handle<Object> SetHiddenPropertiesHashTable( |
2389 Handle<JSObject> object, | 2392 Handle<JSObject> object, |
2390 Handle<Object> value); | 2393 Handle<Object> value); |
2391 | 2394 |
2392 MUST_USE_RESULT Object* GetIdentityHash(); | 2395 MUST_USE_RESULT Object* GetIdentityHash(); |
2393 | 2396 |
2394 static Handle<Smi> GetOrCreateIdentityHash(Handle<JSObject> object); | 2397 static Handle<Smi> GetOrCreateIdentityHash(Handle<JSObject> object); |
2395 | 2398 |
2399 static Handle<SeededNumberDictionary> GetNormalizedElementDictionary( | |
2400 Handle<JSObject> object); | |
2401 | |
2402 // Helper for fast versions of preventExtensions, seal, and freeze. | |
2403 // attrs is one of NONE, SEALED, or FROZEN (depending on the operation). | |
2404 template <PropertyAttributes attrs> | |
2405 MUST_USE_RESULT static MaybeHandle<Object> PreventExtensionsWithTransition( | |
2406 Handle<JSObject> object); | |
2407 | |
2396 DISALLOW_IMPLICIT_CONSTRUCTORS(JSObject); | 2408 DISALLOW_IMPLICIT_CONSTRUCTORS(JSObject); |
2397 }; | 2409 }; |
2398 | 2410 |
2399 | 2411 |
2400 // Common superclass for FixedArrays that allow implementations to share | 2412 // Common superclass for FixedArrays that allow implementations to share |
2401 // common accessors and some code paths. | 2413 // common accessors and some code paths. |
2402 class FixedArrayBase: public HeapObject { | 2414 class FixedArrayBase: public HeapObject { |
2403 public: | 2415 public: |
2404 // [length]: length of the array. | 2416 // [length]: length of the array. |
2405 inline int length() const; | 2417 inline int length() const; |
(...skipping 3199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5605 static void SetMarkedForDeoptimization(Code* code, DependencyGroup group); | 5617 static void SetMarkedForDeoptimization(Code* code, DependencyGroup group); |
5606 | 5618 |
5607 private: | 5619 private: |
5608 // Make a room at the end of the given group by moving out the first | 5620 // Make a room at the end of the given group by moving out the first |
5609 // code objects of the subsequent groups. | 5621 // code objects of the subsequent groups. |
5610 inline void ExtendGroup(DependencyGroup group); | 5622 inline void ExtendGroup(DependencyGroup group); |
5611 static const int kCodesStartIndex = kGroupCount; | 5623 static const int kCodesStartIndex = kGroupCount; |
5612 }; | 5624 }; |
5613 | 5625 |
5614 | 5626 |
5627 class Symbol; | |
Igor Sheludko
2014/12/10 10:36:14
I think src/globals.h is a better place for this.
adamk
2014/12/10 18:46:01
Thanks for the pointer, I didn't know about that l
| |
5628 | |
5629 | |
5615 // All heap objects have a Map that describes their structure. | 5630 // All heap objects have a Map that describes their structure. |
5616 // A Map contains information about: | 5631 // A Map contains information about: |
5617 // - Size information about the object | 5632 // - Size information about the object |
5618 // - How to iterate over an object (for garbage collection) | 5633 // - How to iterate over an object (for garbage collection) |
5619 class Map: public HeapObject { | 5634 class Map: public HeapObject { |
5620 public: | 5635 public: |
5621 // Instance size. | 5636 // Instance size. |
5622 // Size in bytes or kVariableSizeSentinel if instances do not have | 5637 // Size in bytes or kVariableSizeSentinel if instances do not have |
5623 // a fixed size. | 5638 // a fixed size. |
5624 inline int instance_size(); | 5639 inline int instance_size(); |
(...skipping 30 matching lines...) Expand all Loading... | |
5655 | 5670 |
5656 class EnumLengthBits: public BitField<int, | 5671 class EnumLengthBits: public BitField<int, |
5657 0, kDescriptorIndexBitCount> {}; // NOLINT | 5672 0, kDescriptorIndexBitCount> {}; // NOLINT |
5658 class NumberOfOwnDescriptorsBits: public BitField<int, | 5673 class NumberOfOwnDescriptorsBits: public BitField<int, |
5659 kDescriptorIndexBitCount, kDescriptorIndexBitCount> {}; // NOLINT | 5674 kDescriptorIndexBitCount, kDescriptorIndexBitCount> {}; // NOLINT |
5660 STATIC_ASSERT(kDescriptorIndexBitCount + kDescriptorIndexBitCount == 20); | 5675 STATIC_ASSERT(kDescriptorIndexBitCount + kDescriptorIndexBitCount == 20); |
5661 class DictionaryMap : public BitField<bool, 20, 1> {}; | 5676 class DictionaryMap : public BitField<bool, 20, 1> {}; |
5662 class OwnsDescriptors : public BitField<bool, 21, 1> {}; | 5677 class OwnsDescriptors : public BitField<bool, 21, 1> {}; |
5663 class HasInstanceCallHandler : public BitField<bool, 22, 1> {}; | 5678 class HasInstanceCallHandler : public BitField<bool, 22, 1> {}; |
5664 class Deprecated : public BitField<bool, 23, 1> {}; | 5679 class Deprecated : public BitField<bool, 23, 1> {}; |
5665 class IsFrozen : public BitField<bool, 24, 1> {}; | 5680 class IsUnstable : public BitField<bool, 24, 1> {}; |
5666 class IsUnstable : public BitField<bool, 25, 1> {}; | 5681 class IsMigrationTarget : public BitField<bool, 25, 1> {}; |
5667 class IsMigrationTarget : public BitField<bool, 26, 1> {}; | 5682 class DoneInobjectSlackTracking : public BitField<bool, 26, 1> {}; |
5668 class DoneInobjectSlackTracking : public BitField<bool, 27, 1> {}; | 5683 // Bits 27 and 28 are free. |
5669 // Bit 28 is free. | |
5670 | 5684 |
5671 // Keep this bit field at the very end for better code in | 5685 // Keep this bit field at the very end for better code in |
5672 // Builtins::kJSConstructStubGeneric stub. | 5686 // Builtins::kJSConstructStubGeneric stub. |
5673 class ConstructionCount: public BitField<int, 29, 3> {}; | 5687 class ConstructionCount: public BitField<int, 29, 3> {}; |
5674 | 5688 |
5675 // Tells whether the object in the prototype property will be used | 5689 // Tells whether the object in the prototype property will be used |
5676 // for instances created from this function. If the prototype | 5690 // for instances created from this function. If the prototype |
5677 // property is set to a value that is not a JSObject, the prototype | 5691 // property is set to a value that is not a JSObject, the prototype |
5678 // property will not be used to create instances of the function. | 5692 // property will not be used to create instances of the function. |
5679 // See ECMA-262, 13.2.2. | 5693 // See ECMA-262, 13.2.2. |
(...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5999 DCHECK(length == 0 || instance_descriptors()->HasEnumCache()); | 6013 DCHECK(length == 0 || instance_descriptors()->HasEnumCache()); |
6000 DCHECK(length <= NumberOfOwnDescriptors()); | 6014 DCHECK(length <= NumberOfOwnDescriptors()); |
6001 } | 6015 } |
6002 set_bit_field3(EnumLengthBits::update(bit_field3(), length)); | 6016 set_bit_field3(EnumLengthBits::update(bit_field3(), length)); |
6003 } | 6017 } |
6004 | 6018 |
6005 inline bool owns_descriptors(); | 6019 inline bool owns_descriptors(); |
6006 inline void set_owns_descriptors(bool owns_descriptors); | 6020 inline void set_owns_descriptors(bool owns_descriptors); |
6007 inline bool has_instance_call_handler(); | 6021 inline bool has_instance_call_handler(); |
6008 inline void set_has_instance_call_handler(); | 6022 inline void set_has_instance_call_handler(); |
6009 inline void freeze(); | |
6010 inline bool is_frozen(); | |
6011 inline void mark_unstable(); | 6023 inline void mark_unstable(); |
6012 inline bool is_stable(); | 6024 inline bool is_stable(); |
6013 inline void set_migration_target(bool value); | 6025 inline void set_migration_target(bool value); |
6014 inline bool is_migration_target(); | 6026 inline bool is_migration_target(); |
6015 inline void set_done_inobject_slack_tracking(bool value); | 6027 inline void set_done_inobject_slack_tracking(bool value); |
6016 inline bool done_inobject_slack_tracking(); | 6028 inline bool done_inobject_slack_tracking(); |
6017 inline void set_construction_count(int value); | 6029 inline void set_construction_count(int value); |
6018 inline int construction_count(); | 6030 inline int construction_count(); |
6019 inline void deprecate(); | 6031 inline void deprecate(); |
6020 inline bool is_deprecated(); | 6032 inline bool is_deprecated(); |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
6060 ElementsKind to_kind); | 6072 ElementsKind to_kind); |
6061 | 6073 |
6062 static Handle<Map> AsElementsKind(Handle<Map> map, ElementsKind kind); | 6074 static Handle<Map> AsElementsKind(Handle<Map> map, ElementsKind kind); |
6063 | 6075 |
6064 static Handle<Map> CopyAsElementsKind(Handle<Map> map, | 6076 static Handle<Map> CopyAsElementsKind(Handle<Map> map, |
6065 ElementsKind kind, | 6077 ElementsKind kind, |
6066 TransitionFlag flag); | 6078 TransitionFlag flag); |
6067 | 6079 |
6068 static Handle<Map> CopyForObserved(Handle<Map> map); | 6080 static Handle<Map> CopyForObserved(Handle<Map> map); |
6069 | 6081 |
6070 static Handle<Map> CopyForFreeze(Handle<Map> map); | 6082 static Handle<Map> CopyForPreventExtensions(Handle<Map> map, |
6083 PropertyAttributes attrs_to_add, | |
6084 Handle<Symbol> transition_marker, | |
6085 const char* reason); | |
6071 // Maximal number of fast properties. Used to restrict the number of map | 6086 // Maximal number of fast properties. Used to restrict the number of map |
6072 // transitions to avoid an explosion in the number of maps for objects used as | 6087 // transitions to avoid an explosion in the number of maps for objects used as |
6073 // dictionaries. | 6088 // dictionaries. |
6074 inline bool TooManyFastProperties(StoreFromKeyed store_mode); | 6089 inline bool TooManyFastProperties(StoreFromKeyed store_mode); |
6075 static Handle<Map> TransitionToDataProperty(Handle<Map> map, | 6090 static Handle<Map> TransitionToDataProperty(Handle<Map> map, |
6076 Handle<Name> name, | 6091 Handle<Name> name, |
6077 Handle<Object> value, | 6092 Handle<Object> value, |
6078 PropertyAttributes attributes, | 6093 PropertyAttributes attributes, |
6079 StoreFromKeyed store_mode); | 6094 StoreFromKeyed store_mode); |
6080 static Handle<Map> TransitionToAccessorProperty( | 6095 static Handle<Map> TransitionToAccessorProperty( |
(...skipping 4924 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
11005 } else { | 11020 } else { |
11006 value &= ~(1 << bit_position); | 11021 value &= ~(1 << bit_position); |
11007 } | 11022 } |
11008 return value; | 11023 return value; |
11009 } | 11024 } |
11010 }; | 11025 }; |
11011 | 11026 |
11012 } } // namespace v8::internal | 11027 } } // namespace v8::internal |
11013 | 11028 |
11014 #endif // V8_OBJECTS_H_ | 11029 #endif // V8_OBJECTS_H_ |
OLD | NEW |