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 2031 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2042 ElementsKind to_kind); | 2042 ElementsKind to_kind); |
2043 | 2043 |
2044 static void MigrateToMap(Handle<JSObject> object, Handle<Map> new_map); | 2044 static void MigrateToMap(Handle<JSObject> object, Handle<Map> new_map); |
2045 | 2045 |
2046 // Convert the object to use the canonical dictionary | 2046 // Convert the object to use the canonical dictionary |
2047 // representation. If the object is expected to have additional properties | 2047 // representation. If the object is expected to have additional properties |
2048 // added this number can be indicated to have the backing store allocated to | 2048 // added this number can be indicated to have the backing store allocated to |
2049 // an initial capacity for holding these properties. | 2049 // an initial capacity for holding these properties. |
2050 static void NormalizeProperties(Handle<JSObject> object, | 2050 static void NormalizeProperties(Handle<JSObject> object, |
2051 PropertyNormalizationMode mode, | 2051 PropertyNormalizationMode mode, |
2052 int expected_additional_properties); | 2052 int expected_additional_properties, |
| 2053 const char* reason); |
2053 | 2054 |
2054 // Convert and update the elements backing store to be a | 2055 // Convert and update the elements backing store to be a |
2055 // SeededNumberDictionary dictionary. Returns the backing after conversion. | 2056 // SeededNumberDictionary dictionary. Returns the backing after conversion. |
2056 static Handle<SeededNumberDictionary> NormalizeElements( | 2057 static Handle<SeededNumberDictionary> NormalizeElements( |
2057 Handle<JSObject> object); | 2058 Handle<JSObject> object); |
2058 | 2059 |
2059 // Transform slow named properties to fast variants. | 2060 // Transform slow named properties to fast variants. |
2060 static void MigrateSlowToFast(Handle<JSObject> object, | 2061 static void MigrateSlowToFast(Handle<JSObject> object, |
2061 int unused_property_fields); | 2062 int unused_property_fields, const char* reason); |
2062 | 2063 |
2063 // Access fast-case object properties at index. | 2064 // Access fast-case object properties at index. |
2064 static Handle<Object> FastPropertyAt(Handle<JSObject> object, | 2065 static Handle<Object> FastPropertyAt(Handle<JSObject> object, |
2065 Representation representation, | 2066 Representation representation, |
2066 FieldIndex index); | 2067 FieldIndex index); |
2067 inline Object* RawFastPropertyAt(FieldIndex index); | 2068 inline Object* RawFastPropertyAt(FieldIndex index); |
2068 inline void FastPropertyAtPut(FieldIndex index, Object* value); | 2069 inline void FastPropertyAtPut(FieldIndex index, Object* value); |
2069 void WriteToField(int descriptor, Object* value); | 2070 void WriteToField(int descriptor, Object* value); |
2070 | 2071 |
2071 // Access to in object properties. | 2072 // Access to in object properties. |
(...skipping 3799 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5871 static Handle<Map> CopyGeneralizeAllRepresentations( | 5872 static Handle<Map> CopyGeneralizeAllRepresentations( |
5872 Handle<Map> map, | 5873 Handle<Map> map, |
5873 int modify_index, | 5874 int modify_index, |
5874 StoreMode store_mode, | 5875 StoreMode store_mode, |
5875 const char* reason); | 5876 const char* reason); |
5876 | 5877 |
5877 static Handle<Map> PrepareForDataProperty(Handle<Map> old_map, | 5878 static Handle<Map> PrepareForDataProperty(Handle<Map> old_map, |
5878 int descriptor_number, | 5879 int descriptor_number, |
5879 Handle<Object> value); | 5880 Handle<Object> value); |
5880 | 5881 |
5881 static Handle<Map> Normalize(Handle<Map> map, PropertyNormalizationMode mode); | 5882 static Handle<Map> Normalize(Handle<Map> map, PropertyNormalizationMode mode, |
| 5883 const char* reason); |
5882 | 5884 |
5883 // Returns the constructor name (the name (possibly, inferred name) of the | 5885 // Returns the constructor name (the name (possibly, inferred name) of the |
5884 // function that was used to instantiate the object). | 5886 // function that was used to instantiate the object). |
5885 String* constructor_name(); | 5887 String* constructor_name(); |
5886 | 5888 |
5887 // Tells whether the map is used for JSObjects in dictionary mode (ie | 5889 // Tells whether the map is used for JSObjects in dictionary mode (ie |
5888 // normalized objects, ie objects for which HasFastProperties returns false). | 5890 // normalized objects, ie objects for which HasFastProperties returns false). |
5889 // A map can never be used for both dictionary mode and fast mode JSObjects. | 5891 // A map can never be used for both dictionary mode and fast mode JSObjects. |
5890 // False by default and for HeapObjects that are not JSObjects. | 5892 // False by default and for HeapObjects that are not JSObjects. |
5891 inline void set_dictionary_map(bool value); | 5893 inline void set_dictionary_map(bool value); |
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6080 static Handle<Map> TransitionToAccessorProperty( | 6082 static Handle<Map> TransitionToAccessorProperty( |
6081 Handle<Map> map, Handle<Name> name, AccessorComponent component, | 6083 Handle<Map> map, Handle<Name> name, AccessorComponent component, |
6082 Handle<Object> accessor, PropertyAttributes attributes); | 6084 Handle<Object> accessor, PropertyAttributes attributes); |
6083 static Handle<Map> ReconfigureDataProperty(Handle<Map> map, int descriptor, | 6085 static Handle<Map> ReconfigureDataProperty(Handle<Map> map, int descriptor, |
6084 PropertyAttributes attributes); | 6086 PropertyAttributes attributes); |
6085 | 6087 |
6086 inline void AppendDescriptor(Descriptor* desc); | 6088 inline void AppendDescriptor(Descriptor* desc); |
6087 | 6089 |
6088 // Returns a copy of the map, with all transitions dropped from the | 6090 // Returns a copy of the map, with all transitions dropped from the |
6089 // instance descriptors. | 6091 // instance descriptors. |
6090 static Handle<Map> Copy(Handle<Map> map); | 6092 static Handle<Map> Copy(Handle<Map> map, const char* reason); |
6091 static Handle<Map> Create(Isolate* isolate, int inobject_properties); | 6093 static Handle<Map> Create(Isolate* isolate, int inobject_properties); |
6092 | 6094 |
6093 // Returns the next free property index (only valid for FAST MODE). | 6095 // Returns the next free property index (only valid for FAST MODE). |
6094 int NextFreePropertyIndex(); | 6096 int NextFreePropertyIndex(); |
6095 | 6097 |
6096 // Returns the number of properties described in instance_descriptors | 6098 // Returns the number of properties described in instance_descriptors |
6097 // filtering out properties with the specified attributes. | 6099 // filtering out properties with the specified attributes. |
6098 int NumberOfDescribedProperties(DescriptorFlag which = OWN_DESCRIPTORS, | 6100 int NumberOfDescribedProperties(DescriptorFlag which = OWN_DESCRIPTORS, |
6099 PropertyAttributes filter = NONE); | 6101 PropertyAttributes filter = NONE); |
6100 | 6102 |
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6308 typedef FixedBodyDescriptor<kPointerFieldsBeginOffset, | 6310 typedef FixedBodyDescriptor<kPointerFieldsBeginOffset, |
6309 kPointerFieldsEndOffset, | 6311 kPointerFieldsEndOffset, |
6310 kSize> BodyDescriptor; | 6312 kSize> BodyDescriptor; |
6311 | 6313 |
6312 // Compares this map to another to see if they describe equivalent objects. | 6314 // Compares this map to another to see if they describe equivalent objects. |
6313 // If |mode| is set to CLEAR_INOBJECT_PROPERTIES, |other| is treated as if | 6315 // If |mode| is set to CLEAR_INOBJECT_PROPERTIES, |other| is treated as if |
6314 // it had exactly zero inobject properties. | 6316 // it had exactly zero inobject properties. |
6315 // The "shared" flags of both this map and |other| are ignored. | 6317 // The "shared" flags of both this map and |other| are ignored. |
6316 bool EquivalentToForNormalization(Map* other, PropertyNormalizationMode mode); | 6318 bool EquivalentToForNormalization(Map* other, PropertyNormalizationMode mode); |
6317 | 6319 |
| 6320 #if TRACE_MAPS |
| 6321 static void TraceTransition(const char* what, Map* from, Map* to, Name* name); |
| 6322 static void TraceAllTransitions(Map* map); |
| 6323 #endif |
| 6324 |
6318 private: | 6325 private: |
6319 static void ConnectElementsTransition(Handle<Map> parent, Handle<Map> child); | 6326 static void ConnectElementsTransition(Handle<Map> parent, Handle<Map> child); |
6320 static void ConnectTransition(Handle<Map> parent, Handle<Map> child, | 6327 static void ConnectTransition(Handle<Map> parent, Handle<Map> child, |
6321 Handle<Name> name, SimpleTransitionFlag flag); | 6328 Handle<Name> name, SimpleTransitionFlag flag); |
6322 | 6329 |
6323 bool EquivalentToForTransition(Map* other); | 6330 bool EquivalentToForTransition(Map* other); |
6324 static Handle<Map> RawCopy(Handle<Map> map, int instance_size); | 6331 static Handle<Map> RawCopy(Handle<Map> map, int instance_size); |
6325 static Handle<Map> ShareDescriptor(Handle<Map> map, | 6332 static Handle<Map> ShareDescriptor(Handle<Map> map, |
6326 Handle<DescriptorArray> descriptors, | 6333 Handle<DescriptorArray> descriptors, |
6327 Descriptor* descriptor); | 6334 Descriptor* descriptor); |
6328 static Handle<Map> CopyInstallDescriptors( | 6335 static Handle<Map> CopyInstallDescriptors( |
6329 Handle<Map> map, | 6336 Handle<Map> map, |
6330 int new_descriptor, | 6337 int new_descriptor, |
6331 Handle<DescriptorArray> descriptors); | 6338 Handle<DescriptorArray> descriptors); |
6332 static Handle<Map> CopyAddDescriptor(Handle<Map> map, | 6339 static Handle<Map> CopyAddDescriptor(Handle<Map> map, |
6333 Descriptor* descriptor, | 6340 Descriptor* descriptor, |
6334 TransitionFlag flag); | 6341 TransitionFlag flag); |
6335 static Handle<Map> CopyReplaceDescriptors(Handle<Map> map, | 6342 static Handle<Map> CopyReplaceDescriptors(Handle<Map> map, |
6336 Handle<DescriptorArray> descriptors, | 6343 Handle<DescriptorArray> descriptors, |
6337 TransitionFlag flag, | 6344 TransitionFlag flag, |
6338 MaybeHandle<Name> maybe_name, | 6345 MaybeHandle<Name> maybe_name, |
| 6346 const char* reason, |
6339 SimpleTransitionFlag simple_flag); | 6347 SimpleTransitionFlag simple_flag); |
6340 static Handle<Map> CopyReplaceDescriptor(Handle<Map> map, | 6348 static Handle<Map> CopyReplaceDescriptor(Handle<Map> map, |
6341 Handle<DescriptorArray> descriptors, | 6349 Handle<DescriptorArray> descriptors, |
6342 Descriptor* descriptor, | 6350 Descriptor* descriptor, |
6343 int index, | 6351 int index, |
6344 TransitionFlag flag); | 6352 TransitionFlag flag); |
6345 | 6353 |
6346 static Handle<Map> CopyNormalized(Handle<Map> map, | 6354 static Handle<Map> CopyNormalized(Handle<Map> map, |
6347 PropertyNormalizationMode mode); | 6355 PropertyNormalizationMode mode); |
6348 | 6356 |
(...skipping 353 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6702 | 6710 |
6703 // [expected_nof_properties]: Expected number of properties for the function. | 6711 // [expected_nof_properties]: Expected number of properties for the function. |
6704 inline int expected_nof_properties() const; | 6712 inline int expected_nof_properties() const; |
6705 inline void set_expected_nof_properties(int value); | 6713 inline void set_expected_nof_properties(int value); |
6706 | 6714 |
6707 // [feedback_vector] - accumulates ast node feedback from full-codegen and | 6715 // [feedback_vector] - accumulates ast node feedback from full-codegen and |
6708 // (increasingly) from crankshafted code where sufficient feedback isn't | 6716 // (increasingly) from crankshafted code where sufficient feedback isn't |
6709 // available. | 6717 // available. |
6710 DECL_ACCESSORS(feedback_vector, TypeFeedbackVector) | 6718 DECL_ACCESSORS(feedback_vector, TypeFeedbackVector) |
6711 | 6719 |
| 6720 #if TRACE_MAPS |
| 6721 // [unique_id] - For --trace-maps purposes, an identifier that's persistent |
| 6722 // even if the GC moves this SharedFunctionInfo. |
| 6723 inline int unique_id() const; |
| 6724 inline void set_unique_id(int value); |
| 6725 #endif |
| 6726 |
6712 // [instance class name]: class name for instances. | 6727 // [instance class name]: class name for instances. |
6713 DECL_ACCESSORS(instance_class_name, Object) | 6728 DECL_ACCESSORS(instance_class_name, Object) |
6714 | 6729 |
6715 // [function data]: This field holds some additional data for function. | 6730 // [function data]: This field holds some additional data for function. |
6716 // Currently it either has FunctionTemplateInfo to make benefit the API | 6731 // Currently it either has FunctionTemplateInfo to make benefit the API |
6717 // or Smi identifying a builtin function. | 6732 // or Smi identifying a builtin function. |
6718 // In the long run we don't want all functions to have this field but | 6733 // In the long run we don't want all functions to have this field but |
6719 // we can fix that when we have a better model for storing hidden data | 6734 // we can fix that when we have a better model for storing hidden data |
6720 // on objects. | 6735 // on objects. |
6721 DECL_ACCESSORS(function_data, Object) | 6736 DECL_ACCESSORS(function_data, Object) |
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6948 static const int kConstructStubOffset = kScopeInfoOffset + kPointerSize; | 6963 static const int kConstructStubOffset = kScopeInfoOffset + kPointerSize; |
6949 static const int kInstanceClassNameOffset = | 6964 static const int kInstanceClassNameOffset = |
6950 kConstructStubOffset + kPointerSize; | 6965 kConstructStubOffset + kPointerSize; |
6951 static const int kFunctionDataOffset = | 6966 static const int kFunctionDataOffset = |
6952 kInstanceClassNameOffset + kPointerSize; | 6967 kInstanceClassNameOffset + kPointerSize; |
6953 static const int kScriptOffset = kFunctionDataOffset + kPointerSize; | 6968 static const int kScriptOffset = kFunctionDataOffset + kPointerSize; |
6954 static const int kDebugInfoOffset = kScriptOffset + kPointerSize; | 6969 static const int kDebugInfoOffset = kScriptOffset + kPointerSize; |
6955 static const int kInferredNameOffset = kDebugInfoOffset + kPointerSize; | 6970 static const int kInferredNameOffset = kDebugInfoOffset + kPointerSize; |
6956 static const int kFeedbackVectorOffset = | 6971 static const int kFeedbackVectorOffset = |
6957 kInferredNameOffset + kPointerSize; | 6972 kInferredNameOffset + kPointerSize; |
| 6973 #if TRACE_MAPS |
| 6974 static const int kUniqueIdOffset = kFeedbackVectorOffset + kPointerSize; |
| 6975 static const int kLastPointerFieldOffset = kUniqueIdOffset; |
| 6976 #else |
| 6977 static const int kLastPointerFieldOffset = kFeedbackVectorOffset; |
| 6978 #endif |
| 6979 |
6958 #if V8_HOST_ARCH_32_BIT | 6980 #if V8_HOST_ARCH_32_BIT |
6959 // Smi fields. | 6981 // Smi fields. |
6960 static const int kLengthOffset = | 6982 static const int kLengthOffset = kLastPointerFieldOffset + kPointerSize; |
6961 kFeedbackVectorOffset + kPointerSize; | |
6962 static const int kFormalParameterCountOffset = kLengthOffset + kPointerSize; | 6983 static const int kFormalParameterCountOffset = kLengthOffset + kPointerSize; |
6963 static const int kExpectedNofPropertiesOffset = | 6984 static const int kExpectedNofPropertiesOffset = |
6964 kFormalParameterCountOffset + kPointerSize; | 6985 kFormalParameterCountOffset + kPointerSize; |
6965 static const int kNumLiteralsOffset = | 6986 static const int kNumLiteralsOffset = |
6966 kExpectedNofPropertiesOffset + kPointerSize; | 6987 kExpectedNofPropertiesOffset + kPointerSize; |
6967 static const int kStartPositionAndTypeOffset = | 6988 static const int kStartPositionAndTypeOffset = |
6968 kNumLiteralsOffset + kPointerSize; | 6989 kNumLiteralsOffset + kPointerSize; |
6969 static const int kEndPositionOffset = | 6990 static const int kEndPositionOffset = |
6970 kStartPositionAndTypeOffset + kPointerSize; | 6991 kStartPositionAndTypeOffset + kPointerSize; |
6971 static const int kFunctionTokenPositionOffset = | 6992 static const int kFunctionTokenPositionOffset = |
(...skipping 15 matching lines...) Expand all Loading... |
6987 // The only reason to use smi fields instead of int fields | 7008 // The only reason to use smi fields instead of int fields |
6988 // is to allow iteration without maps decoding during | 7009 // is to allow iteration without maps decoding during |
6989 // garbage collections. | 7010 // garbage collections. |
6990 // To avoid wasting space on 64-bit architectures we use | 7011 // To avoid wasting space on 64-bit architectures we use |
6991 // the following trick: we group integer fields into pairs | 7012 // the following trick: we group integer fields into pairs |
6992 // The least significant integer in each pair is shifted left by 1. | 7013 // The least significant integer in each pair is shifted left by 1. |
6993 // By doing this we guarantee that LSB of each kPointerSize aligned | 7014 // By doing this we guarantee that LSB of each kPointerSize aligned |
6994 // word is not set and thus this word cannot be treated as pointer | 7015 // word is not set and thus this word cannot be treated as pointer |
6995 // to HeapObject during old space traversal. | 7016 // to HeapObject during old space traversal. |
6996 #if V8_TARGET_LITTLE_ENDIAN | 7017 #if V8_TARGET_LITTLE_ENDIAN |
6997 static const int kLengthOffset = | 7018 static const int kLengthOffset = kLastPointerFieldOffset + kPointerSize; |
6998 kFeedbackVectorOffset + kPointerSize; | |
6999 static const int kFormalParameterCountOffset = | 7019 static const int kFormalParameterCountOffset = |
7000 kLengthOffset + kIntSize; | 7020 kLengthOffset + kIntSize; |
7001 | 7021 |
7002 static const int kExpectedNofPropertiesOffset = | 7022 static const int kExpectedNofPropertiesOffset = |
7003 kFormalParameterCountOffset + kIntSize; | 7023 kFormalParameterCountOffset + kIntSize; |
7004 static const int kNumLiteralsOffset = | 7024 static const int kNumLiteralsOffset = |
7005 kExpectedNofPropertiesOffset + kIntSize; | 7025 kExpectedNofPropertiesOffset + kIntSize; |
7006 | 7026 |
7007 static const int kEndPositionOffset = | 7027 static const int kEndPositionOffset = |
7008 kNumLiteralsOffset + kIntSize; | 7028 kNumLiteralsOffset + kIntSize; |
(...skipping 13 matching lines...) Expand all Loading... |
7022 static const int kAstNodeCountOffset = | 7042 static const int kAstNodeCountOffset = |
7023 kCountersOffset + kIntSize; | 7043 kCountersOffset + kIntSize; |
7024 static const int kProfilerTicksOffset = | 7044 static const int kProfilerTicksOffset = |
7025 kAstNodeCountOffset + kIntSize; | 7045 kAstNodeCountOffset + kIntSize; |
7026 | 7046 |
7027 // Total size. | 7047 // Total size. |
7028 static const int kSize = kProfilerTicksOffset + kIntSize; | 7048 static const int kSize = kProfilerTicksOffset + kIntSize; |
7029 | 7049 |
7030 #elif V8_TARGET_BIG_ENDIAN | 7050 #elif V8_TARGET_BIG_ENDIAN |
7031 static const int kFormalParameterCountOffset = | 7051 static const int kFormalParameterCountOffset = |
7032 kFeedbackVectorOffset + kPointerSize; | 7052 kLastPointerFieldOffset + kPointerSize; |
7033 static const int kLengthOffset = kFormalParameterCountOffset + kIntSize; | 7053 static const int kLengthOffset = kFormalParameterCountOffset + kIntSize; |
7034 | 7054 |
7035 static const int kNumLiteralsOffset = kLengthOffset + kIntSize; | 7055 static const int kNumLiteralsOffset = kLengthOffset + kIntSize; |
7036 static const int kExpectedNofPropertiesOffset = kNumLiteralsOffset + kIntSize; | 7056 static const int kExpectedNofPropertiesOffset = kNumLiteralsOffset + kIntSize; |
7037 | 7057 |
7038 static const int kStartPositionAndTypeOffset = | 7058 static const int kStartPositionAndTypeOffset = |
7039 kExpectedNofPropertiesOffset + kIntSize; | 7059 kExpectedNofPropertiesOffset + kIntSize; |
7040 static const int kEndPositionOffset = kStartPositionAndTypeOffset + kIntSize; | 7060 static const int kEndPositionOffset = kStartPositionAndTypeOffset + kIntSize; |
7041 | 7061 |
7042 static const int kCompilerHintsOffset = kEndPositionOffset + kIntSize; | 7062 static const int kCompilerHintsOffset = kEndPositionOffset + kIntSize; |
(...skipping 12 matching lines...) Expand all Loading... |
7055 | 7075 |
7056 #else | 7076 #else |
7057 #error Unknown byte ordering | 7077 #error Unknown byte ordering |
7058 #endif // Big endian | 7078 #endif // Big endian |
7059 #endif // 64-bit | 7079 #endif // 64-bit |
7060 | 7080 |
7061 | 7081 |
7062 static const int kAlignedSize = POINTER_SIZE_ALIGN(kSize); | 7082 static const int kAlignedSize = POINTER_SIZE_ALIGN(kSize); |
7063 | 7083 |
7064 typedef FixedBodyDescriptor<kNameOffset, | 7084 typedef FixedBodyDescriptor<kNameOffset, |
7065 kFeedbackVectorOffset + kPointerSize, | 7085 kLastPointerFieldOffset + kPointerSize, |
7066 kSize> BodyDescriptor; | 7086 kSize> BodyDescriptor; |
7067 | 7087 |
7068 // Bit positions in start_position_and_type. | 7088 // Bit positions in start_position_and_type. |
7069 // The source code start position is in the 30 most significant bits of | 7089 // The source code start position is in the 30 most significant bits of |
7070 // the start_position_and_type field. | 7090 // the start_position_and_type field. |
7071 static const int kIsExpressionBit = 0; | 7091 static const int kIsExpressionBit = 0; |
7072 static const int kIsTopLevelBit = 1; | 7092 static const int kIsTopLevelBit = 1; |
7073 static const int kStartPositionShift = 2; | 7093 static const int kStartPositionShift = 2; |
7074 static const int kStartPositionMask = ~((1 << kStartPositionShift) - 1); | 7094 static const int kStartPositionMask = ~((1 << kStartPositionShift) - 1); |
7075 | 7095 |
(...skipping 1495 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8571 | 8591 |
8572 // Conversion. | 8592 // Conversion. |
8573 inline bool AsArrayIndex(uint32_t* index); | 8593 inline bool AsArrayIndex(uint32_t* index); |
8574 | 8594 |
8575 // Whether name can only name own properties. | 8595 // Whether name can only name own properties. |
8576 inline bool IsOwn(); | 8596 inline bool IsOwn(); |
8577 | 8597 |
8578 DECLARE_CAST(Name) | 8598 DECLARE_CAST(Name) |
8579 | 8599 |
8580 DECLARE_PRINTER(Name) | 8600 DECLARE_PRINTER(Name) |
| 8601 #if TRACE_MAPS |
| 8602 void NameShortPrint(); |
| 8603 int NameShortPrint(Vector<char> str); |
| 8604 #endif |
8581 | 8605 |
8582 // Layout description. | 8606 // Layout description. |
8583 static const int kHashFieldSlot = HeapObject::kHeaderSize; | 8607 static const int kHashFieldSlot = HeapObject::kHeaderSize; |
8584 #if V8_TARGET_LITTLE_ENDIAN || !V8_HOST_ARCH_64_BIT | 8608 #if V8_TARGET_LITTLE_ENDIAN || !V8_HOST_ARCH_64_BIT |
8585 static const int kHashFieldOffset = kHashFieldSlot; | 8609 static const int kHashFieldOffset = kHashFieldSlot; |
8586 #else | 8610 #else |
8587 static const int kHashFieldOffset = kHashFieldSlot + kIntSize; | 8611 static const int kHashFieldOffset = kHashFieldSlot + kIntSize; |
8588 #endif | 8612 #endif |
8589 static const int kSize = kHashFieldSlot + kPointerSize; | 8613 static const int kSize = kHashFieldSlot + kPointerSize; |
8590 | 8614 |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8673 typedef FixedBodyDescriptor<kNameOffset, kFlagsOffset, kSize> BodyDescriptor; | 8697 typedef FixedBodyDescriptor<kNameOffset, kFlagsOffset, kSize> BodyDescriptor; |
8674 | 8698 |
8675 void SymbolShortPrint(std::ostream& os); | 8699 void SymbolShortPrint(std::ostream& os); |
8676 | 8700 |
8677 private: | 8701 private: |
8678 static const int kPrivateBit = 0; | 8702 static const int kPrivateBit = 0; |
8679 static const int kOwnBit = 1; | 8703 static const int kOwnBit = 1; |
8680 | 8704 |
8681 const char* PrivateSymbolToName() const; | 8705 const char* PrivateSymbolToName() const; |
8682 | 8706 |
| 8707 #if TRACE_MAPS |
| 8708 friend class Name; // For PrivateSymbolToName. |
| 8709 #endif |
| 8710 |
8683 DISALLOW_IMPLICIT_CONSTRUCTORS(Symbol); | 8711 DISALLOW_IMPLICIT_CONSTRUCTORS(Symbol); |
8684 }; | 8712 }; |
8685 | 8713 |
8686 | 8714 |
8687 class ConsString; | 8715 class ConsString; |
8688 | 8716 |
8689 // The String abstract class captures JavaScript string values: | 8717 // The String abstract class captures JavaScript string values: |
8690 // | 8718 // |
8691 // Ecma-262: | 8719 // Ecma-262: |
8692 // 4.3.16 String Value | 8720 // 4.3.16 String Value |
(...skipping 2240 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10933 } else { | 10961 } else { |
10934 value &= ~(1 << bit_position); | 10962 value &= ~(1 << bit_position); |
10935 } | 10963 } |
10936 return value; | 10964 return value; |
10937 } | 10965 } |
10938 }; | 10966 }; |
10939 | 10967 |
10940 } } // namespace v8::internal | 10968 } } // namespace v8::internal |
10941 | 10969 |
10942 #endif // V8_OBJECTS_H_ | 10970 #endif // V8_OBJECTS_H_ |
OLD | NEW |