OLD | NEW |
1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 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 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
130 ABSENT = 16 // Used in runtime to indicate a property is absent. | 130 ABSENT = 16 // Used in runtime to indicate a property is absent. |
131 // ABSENT can never be stored in or returned from a descriptor's attributes | 131 // ABSENT can never be stored in or returned from a descriptor's attributes |
132 // bitfield. It is only used as a return value meaning the attributes of | 132 // bitfield. It is only used as a return value meaning the attributes of |
133 // a non-existent property. | 133 // a non-existent property. |
134 }; | 134 }; |
135 | 135 |
136 namespace v8 { | 136 namespace v8 { |
137 namespace internal { | 137 namespace internal { |
138 | 138 |
139 enum ElementsKind { | 139 enum ElementsKind { |
140 // The "fast" kind for tagged values. Must be first to make it possible | 140 // The "fast" kind for elements that only contain SMI values. Must be first |
141 // to efficiently check maps if they have fast elements. | 141 // to make it possible to efficiently check maps for this kind. |
| 142 FAST_SMI_ONLY_ELEMENTS, |
| 143 |
| 144 // The "fast" kind for tagged values. Must be second to make it possible to |
| 145 // efficiently check maps for this and the FAST_SMI_ONLY_ELEMENTS kind |
| 146 // together at once. |
142 FAST_ELEMENTS, | 147 FAST_ELEMENTS, |
143 | 148 |
144 // The "fast" kind for unwrapped, non-tagged double values. | 149 // The "fast" kind for unwrapped, non-tagged double values. |
145 FAST_DOUBLE_ELEMENTS, | 150 FAST_DOUBLE_ELEMENTS, |
146 | 151 |
147 // The "slow" kind. | 152 // The "slow" kind. |
148 DICTIONARY_ELEMENTS, | 153 DICTIONARY_ELEMENTS, |
149 NON_STRICT_ARGUMENTS_ELEMENTS, | 154 NON_STRICT_ARGUMENTS_ELEMENTS, |
150 // The "fast" kind for external arrays | 155 // The "fast" kind for external arrays |
151 EXTERNAL_BYTE_ELEMENTS, | 156 EXTERNAL_BYTE_ELEMENTS, |
152 EXTERNAL_UNSIGNED_BYTE_ELEMENTS, | 157 EXTERNAL_UNSIGNED_BYTE_ELEMENTS, |
153 EXTERNAL_SHORT_ELEMENTS, | 158 EXTERNAL_SHORT_ELEMENTS, |
154 EXTERNAL_UNSIGNED_SHORT_ELEMENTS, | 159 EXTERNAL_UNSIGNED_SHORT_ELEMENTS, |
155 EXTERNAL_INT_ELEMENTS, | 160 EXTERNAL_INT_ELEMENTS, |
156 EXTERNAL_UNSIGNED_INT_ELEMENTS, | 161 EXTERNAL_UNSIGNED_INT_ELEMENTS, |
157 EXTERNAL_FLOAT_ELEMENTS, | 162 EXTERNAL_FLOAT_ELEMENTS, |
158 EXTERNAL_DOUBLE_ELEMENTS, | 163 EXTERNAL_DOUBLE_ELEMENTS, |
159 EXTERNAL_PIXEL_ELEMENTS, | 164 EXTERNAL_PIXEL_ELEMENTS, |
160 | 165 |
161 // Derived constants from ElementsKind | 166 // Derived constants from ElementsKind |
162 FIRST_EXTERNAL_ARRAY_ELEMENTS_KIND = EXTERNAL_BYTE_ELEMENTS, | 167 FIRST_EXTERNAL_ARRAY_ELEMENTS_KIND = EXTERNAL_BYTE_ELEMENTS, |
163 LAST_EXTERNAL_ARRAY_ELEMENTS_KIND = EXTERNAL_PIXEL_ELEMENTS, | 168 LAST_EXTERNAL_ARRAY_ELEMENTS_KIND = EXTERNAL_PIXEL_ELEMENTS, |
164 FIRST_ELEMENTS_KIND = FAST_ELEMENTS, | 169 FIRST_ELEMENTS_KIND = FAST_SMI_ONLY_ELEMENTS, |
165 LAST_ELEMENTS_KIND = EXTERNAL_PIXEL_ELEMENTS | 170 LAST_ELEMENTS_KIND = EXTERNAL_PIXEL_ELEMENTS |
166 }; | 171 }; |
167 | 172 |
168 static const int kElementsKindCount = | 173 static const int kElementsKindCount = |
169 LAST_ELEMENTS_KIND - FIRST_ELEMENTS_KIND + 1; | 174 LAST_ELEMENTS_KIND - FIRST_ELEMENTS_KIND + 1; |
170 | 175 |
171 // PropertyDetails captures type and attributes for a property. | 176 // PropertyDetails captures type and attributes for a property. |
172 // They are used both in property dictionaries and instance descriptors. | 177 // They are used both in property dictionaries and instance descriptors. |
173 class PropertyDetails BASE_EMBEDDED { | 178 class PropertyDetails BASE_EMBEDDED { |
174 public: | 179 public: |
(...skipping 1250 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1425 // EnsureWritableFastElements in this case. | 1430 // EnsureWritableFastElements in this case. |
1426 // | 1431 // |
1427 // In the slow mode the elements is either a NumberDictionary, an | 1432 // In the slow mode the elements is either a NumberDictionary, an |
1428 // ExternalArray, or a FixedArray parameter map for a (non-strict) | 1433 // ExternalArray, or a FixedArray parameter map for a (non-strict) |
1429 // arguments object. | 1434 // arguments object. |
1430 DECL_ACCESSORS(elements, FixedArrayBase) | 1435 DECL_ACCESSORS(elements, FixedArrayBase) |
1431 inline void initialize_elements(); | 1436 inline void initialize_elements(); |
1432 MUST_USE_RESULT inline MaybeObject* ResetElements(); | 1437 MUST_USE_RESULT inline MaybeObject* ResetElements(); |
1433 inline ElementsKind GetElementsKind(); | 1438 inline ElementsKind GetElementsKind(); |
1434 inline ElementsAccessor* GetElementsAccessor(); | 1439 inline ElementsAccessor* GetElementsAccessor(); |
| 1440 inline bool HasFastSmiOnlyElements(); |
1435 inline bool HasFastElements(); | 1441 inline bool HasFastElements(); |
| 1442 // Returns if an object has either FAST_ELEMENT or FAST_SMI_ONLY_ELEMENT |
| 1443 // elements. TODO(danno): Rename HasFastTypeElements to HasFastElements() and |
| 1444 // HasFastElements to HasFastObjectElements. |
| 1445 inline bool HasFastTypeElements(); |
1436 inline bool HasFastDoubleElements(); | 1446 inline bool HasFastDoubleElements(); |
| 1447 inline bool HasNonStrictArgumentsElements(); |
1437 inline bool HasDictionaryElements(); | 1448 inline bool HasDictionaryElements(); |
1438 inline bool HasExternalPixelElements(); | 1449 inline bool HasExternalPixelElements(); |
1439 inline bool HasExternalArrayElements(); | 1450 inline bool HasExternalArrayElements(); |
1440 inline bool HasExternalByteElements(); | 1451 inline bool HasExternalByteElements(); |
1441 inline bool HasExternalUnsignedByteElements(); | 1452 inline bool HasExternalUnsignedByteElements(); |
1442 inline bool HasExternalShortElements(); | 1453 inline bool HasExternalShortElements(); |
1443 inline bool HasExternalUnsignedShortElements(); | 1454 inline bool HasExternalUnsignedShortElements(); |
1444 inline bool HasExternalIntElements(); | 1455 inline bool HasExternalIntElements(); |
1445 inline bool HasExternalUnsignedIntElements(); | 1456 inline bool HasExternalUnsignedIntElements(); |
1446 inline bool HasExternalFloatElements(); | 1457 inline bool HasExternalFloatElements(); |
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1601 // be returned in case no hidden properties object is present and creation was | 1612 // be returned in case no hidden properties object is present and creation was |
1602 // omitted. | 1613 // omitted. |
1603 MUST_USE_RESULT MaybeObject* GetIdentityHash(HiddenPropertiesFlag flag); | 1614 MUST_USE_RESULT MaybeObject* GetIdentityHash(HiddenPropertiesFlag flag); |
1604 | 1615 |
1605 MUST_USE_RESULT MaybeObject* DeleteProperty(String* name, DeleteMode mode); | 1616 MUST_USE_RESULT MaybeObject* DeleteProperty(String* name, DeleteMode mode); |
1606 MUST_USE_RESULT MaybeObject* DeleteElement(uint32_t index, DeleteMode mode); | 1617 MUST_USE_RESULT MaybeObject* DeleteElement(uint32_t index, DeleteMode mode); |
1607 | 1618 |
1608 // Tests for the fast common case for property enumeration. | 1619 // Tests for the fast common case for property enumeration. |
1609 bool IsSimpleEnum(); | 1620 bool IsSimpleEnum(); |
1610 | 1621 |
| 1622 inline void ValidateSmiOnlyElements(); |
| 1623 |
| 1624 // Makes sure that this object can contain non-smi Object as elements. |
| 1625 inline MaybeObject* EnsureCanContainNonSmiElements(); |
| 1626 |
| 1627 // Makes sure that this object can contain the specified elements. |
| 1628 inline MaybeObject* EnsureCanContainElements(Object** elements, |
| 1629 uint32_t count); |
| 1630 inline MaybeObject* EnsureCanContainElements(FixedArray* elements); |
| 1631 MaybeObject* EnsureCanContainElements(Arguments* arguments, |
| 1632 uint32_t first_arg, |
| 1633 uint32_t arg_count); |
| 1634 |
1611 // Do we want to keep the elements in fast case when increasing the | 1635 // Do we want to keep the elements in fast case when increasing the |
1612 // capacity? | 1636 // capacity? |
1613 bool ShouldConvertToSlowElements(int new_capacity); | 1637 bool ShouldConvertToSlowElements(int new_capacity); |
1614 // Returns true if the backing storage for the slow-case elements of | 1638 // Returns true if the backing storage for the slow-case elements of |
1615 // this object takes up nearly as much space as a fast-case backing | 1639 // this object takes up nearly as much space as a fast-case backing |
1616 // storage would. In that case the JSObject should have fast | 1640 // storage would. In that case the JSObject should have fast |
1617 // elements. | 1641 // elements. |
1618 bool ShouldConvertToFastElements(); | 1642 bool ShouldConvertToFastElements(); |
1619 // Returns true if the elements of JSObject contains only values that can be | 1643 // Returns true if the elements of JSObject contains only values that can be |
1620 // represented in a FixedDoubleArray. | 1644 // represented in a FixedDoubleArray. |
(...skipping 28 matching lines...) Expand all Loading... |
1649 | 1673 |
1650 LocalElementType HasLocalElement(uint32_t index); | 1674 LocalElementType HasLocalElement(uint32_t index); |
1651 | 1675 |
1652 bool HasElementWithInterceptor(JSReceiver* receiver, uint32_t index); | 1676 bool HasElementWithInterceptor(JSReceiver* receiver, uint32_t index); |
1653 bool HasElementPostInterceptor(JSReceiver* receiver, uint32_t index); | 1677 bool HasElementPostInterceptor(JSReceiver* receiver, uint32_t index); |
1654 | 1678 |
1655 MUST_USE_RESULT MaybeObject* SetFastElement(uint32_t index, | 1679 MUST_USE_RESULT MaybeObject* SetFastElement(uint32_t index, |
1656 Object* value, | 1680 Object* value, |
1657 StrictModeFlag strict_mode, | 1681 StrictModeFlag strict_mode, |
1658 bool check_prototype); | 1682 bool check_prototype); |
| 1683 |
1659 MUST_USE_RESULT MaybeObject* SetDictionaryElement(uint32_t index, | 1684 MUST_USE_RESULT MaybeObject* SetDictionaryElement(uint32_t index, |
1660 Object* value, | 1685 Object* value, |
1661 StrictModeFlag strict_mode, | 1686 StrictModeFlag strict_mode, |
1662 bool check_prototype); | 1687 bool check_prototype); |
1663 | 1688 |
1664 MUST_USE_RESULT MaybeObject* SetFastDoubleElement( | 1689 MUST_USE_RESULT MaybeObject* SetFastDoubleElement( |
1665 uint32_t index, | 1690 uint32_t index, |
1666 Object* value, | 1691 Object* value, |
1667 StrictModeFlag strict_mode, | 1692 StrictModeFlag strict_mode, |
1668 bool check_prototype = true); | 1693 bool check_prototype = true); |
1669 | 1694 |
1670 // Set the index'th array element. | 1695 // Set the index'th array element. |
1671 // A Failure object is returned if GC is needed. | 1696 // A Failure object is returned if GC is needed. |
1672 MUST_USE_RESULT MaybeObject* SetElement(uint32_t index, | 1697 MUST_USE_RESULT MaybeObject* SetElement(uint32_t index, |
1673 Object* value, | 1698 Object* value, |
1674 StrictModeFlag strict_mode, | 1699 StrictModeFlag strict_mode, |
1675 bool check_prototype); | 1700 bool check_prototype); |
1676 | 1701 |
1677 // Returns the index'th element. | 1702 // Returns the index'th element. |
1678 // The undefined object if index is out of bounds. | 1703 // The undefined object if index is out of bounds. |
1679 MaybeObject* GetElementWithInterceptor(Object* receiver, uint32_t index); | 1704 MaybeObject* GetElementWithInterceptor(Object* receiver, uint32_t index); |
1680 | 1705 |
| 1706 enum SetFastElementsCapacityMode { |
| 1707 kAllowSmiOnlyElements, |
| 1708 kDontAllowSmiOnlyElements |
| 1709 }; |
| 1710 |
1681 // Replace the elements' backing store with fast elements of the given | 1711 // Replace the elements' backing store with fast elements of the given |
1682 // capacity. Update the length for JSArrays. Returns the new backing | 1712 // capacity. Update the length for JSArrays. Returns the new backing |
1683 // store. | 1713 // store. |
1684 MUST_USE_RESULT MaybeObject* SetFastElementsCapacityAndLength(int capacity, | 1714 MUST_USE_RESULT MaybeObject* SetFastElementsCapacityAndLength( |
1685 int length); | 1715 int capacity, |
| 1716 int length, |
| 1717 SetFastElementsCapacityMode set_capacity_mode); |
1686 MUST_USE_RESULT MaybeObject* SetFastDoubleElementsCapacityAndLength( | 1718 MUST_USE_RESULT MaybeObject* SetFastDoubleElementsCapacityAndLength( |
1687 int capacity, | 1719 int capacity, |
1688 int length); | 1720 int length); |
1689 MUST_USE_RESULT MaybeObject* SetSlowElements(Object* length); | 1721 MUST_USE_RESULT MaybeObject* SetSlowElements(Object* length); |
1690 | 1722 |
1691 // Lookup interceptors are used for handling properties controlled by host | 1723 // Lookup interceptors are used for handling properties controlled by host |
1692 // objects. | 1724 // objects. |
1693 inline bool HasNamedInterceptor(); | 1725 inline bool HasNamedInterceptor(); |
1694 inline bool HasIndexedInterceptor(); | 1726 inline bool HasIndexedInterceptor(); |
1695 | 1727 |
(...skipping 2277 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3973 set_bit_field2((bit_field2() & ~kElementsKindMask) | | 4005 set_bit_field2((bit_field2() & ~kElementsKindMask) | |
3974 (elements_kind << kElementsKindShift)); | 4006 (elements_kind << kElementsKindShift)); |
3975 ASSERT(this->elements_kind() == elements_kind); | 4007 ASSERT(this->elements_kind() == elements_kind); |
3976 } | 4008 } |
3977 | 4009 |
3978 inline ElementsKind elements_kind() { | 4010 inline ElementsKind elements_kind() { |
3979 return static_cast<ElementsKind>( | 4011 return static_cast<ElementsKind>( |
3980 (bit_field2() & kElementsKindMask) >> kElementsKindShift); | 4012 (bit_field2() & kElementsKindMask) >> kElementsKindShift); |
3981 } | 4013 } |
3982 | 4014 |
| 4015 // Tells whether the instance has fast elements that are only Smis. |
| 4016 inline bool has_fast_smi_only_elements() { |
| 4017 return elements_kind() == FAST_SMI_ONLY_ELEMENTS; |
| 4018 } |
| 4019 |
3983 // Tells whether the instance has fast elements. | 4020 // Tells whether the instance has fast elements. |
3984 // Equivalent to instance->GetElementsKind() == FAST_ELEMENTS. | |
3985 inline bool has_fast_elements() { | 4021 inline bool has_fast_elements() { |
3986 return elements_kind() == FAST_ELEMENTS; | 4022 return elements_kind() == FAST_ELEMENTS; |
3987 } | 4023 } |
3988 | 4024 |
3989 inline bool has_fast_double_elements() { | 4025 inline bool has_fast_double_elements() { |
3990 return elements_kind() == FAST_DOUBLE_ELEMENTS; | 4026 return elements_kind() == FAST_DOUBLE_ELEMENTS; |
3991 } | 4027 } |
3992 | 4028 |
| 4029 inline bool has_non_strict_arguments_elements() { |
| 4030 return elements_kind() == NON_STRICT_ARGUMENTS_ELEMENTS; |
| 4031 } |
| 4032 |
3993 inline bool has_external_array_elements() { | 4033 inline bool has_external_array_elements() { |
3994 ElementsKind kind(elements_kind()); | 4034 ElementsKind kind(elements_kind()); |
3995 return kind >= FIRST_EXTERNAL_ARRAY_ELEMENTS_KIND && | 4035 return kind >= FIRST_EXTERNAL_ARRAY_ELEMENTS_KIND && |
3996 kind <= LAST_EXTERNAL_ARRAY_ELEMENTS_KIND; | 4036 kind <= LAST_EXTERNAL_ARRAY_ELEMENTS_KIND; |
3997 } | 4037 } |
3998 | 4038 |
3999 inline bool has_dictionary_elements() { | 4039 inline bool has_dictionary_elements() { |
4000 return elements_kind() == DICTIONARY_ELEMENTS; | 4040 return elements_kind() == DICTIONARY_ELEMENTS; |
4001 } | 4041 } |
4002 | 4042 |
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4230 static const int kIsUndetectable = 5; | 4270 static const int kIsUndetectable = 5; |
4231 static const int kHasInstanceCallHandler = 6; | 4271 static const int kHasInstanceCallHandler = 6; |
4232 static const int kIsAccessCheckNeeded = 7; | 4272 static const int kIsAccessCheckNeeded = 7; |
4233 | 4273 |
4234 // Bit positions for bit field 2 | 4274 // Bit positions for bit field 2 |
4235 static const int kIsExtensible = 0; | 4275 static const int kIsExtensible = 0; |
4236 static const int kFunctionWithPrototype = 1; | 4276 static const int kFunctionWithPrototype = 1; |
4237 static const int kStringWrapperSafeForDefaultValueOf = 2; | 4277 static const int kStringWrapperSafeForDefaultValueOf = 2; |
4238 static const int kAttachedToSharedFunctionInfo = 3; | 4278 static const int kAttachedToSharedFunctionInfo = 3; |
4239 // No bits can be used after kElementsKindFirstBit, they are all reserved for | 4279 // No bits can be used after kElementsKindFirstBit, they are all reserved for |
4240 // storing ElementKind. for anything other than storing the ElementKind. | 4280 // storing ElementKind. |
4241 static const int kElementsKindShift = 4; | 4281 static const int kElementsKindShift = 4; |
4242 static const int kElementsKindBitCount = 4; | 4282 static const int kElementsKindBitCount = 4; |
4243 | 4283 |
4244 // Derived values from bit field 2 | 4284 // Derived values from bit field 2 |
4245 static const int kElementsKindMask = (-1 << kElementsKindShift) & | 4285 static const int kElementsKindMask = (-1 << kElementsKindShift) & |
4246 ((1 << (kElementsKindShift + kElementsKindBitCount)) - 1); | 4286 ((1 << (kElementsKindShift + kElementsKindBitCount)) - 1); |
4247 static const int8_t kMaximumBitField2FastElementValue = static_cast<int8_t>( | 4287 static const int8_t kMaximumBitField2FastElementValue = static_cast<int8_t>( |
4248 (FAST_ELEMENTS + 1) << Map::kElementsKindShift) - 1; | 4288 (FAST_ELEMENTS + 1) << Map::kElementsKindShift) - 1; |
| 4289 static const int8_t kMaximumBitField2FastSmiOnlyElementValue = |
| 4290 static_cast<int8_t>((FAST_SMI_ONLY_ELEMENTS + 1) << |
| 4291 Map::kElementsKindShift) - 1; |
4249 | 4292 |
4250 // Bit positions for bit field 3 | 4293 // Bit positions for bit field 3 |
4251 static const int kIsShared = 0; | 4294 static const int kIsShared = 0; |
4252 | 4295 |
4253 // Layout of the default cache. It holds alternating name and code objects. | 4296 // Layout of the default cache. It holds alternating name and code objects. |
4254 static const int kCodeCacheEntrySize = 2; | 4297 static const int kCodeCacheEntrySize = 2; |
4255 static const int kCodeCacheEntryNameOffset = 0; | 4298 static const int kCodeCacheEntryNameOffset = 0; |
4256 static const int kCodeCacheEntryCodeOffset = 1; | 4299 static const int kCodeCacheEntryCodeOffset = 1; |
4257 | 4300 |
4258 typedef FixedBodyDescriptor<kPointerFieldsBeginOffset, | 4301 typedef FixedBodyDescriptor<kPointerFieldsBeginOffset, |
(...skipping 2595 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6854 | 6897 |
6855 MUST_USE_RESULT MaybeObject* JSArrayUpdateLengthFromIndex(uint32_t index, | 6898 MUST_USE_RESULT MaybeObject* JSArrayUpdateLengthFromIndex(uint32_t index, |
6856 Object* value); | 6899 Object* value); |
6857 | 6900 |
6858 // Initialize the array with the given capacity. The function may | 6901 // Initialize the array with the given capacity. The function may |
6859 // fail due to out-of-memory situations, but only if the requested | 6902 // fail due to out-of-memory situations, but only if the requested |
6860 // capacity is non-zero. | 6903 // capacity is non-zero. |
6861 MUST_USE_RESULT MaybeObject* Initialize(int capacity); | 6904 MUST_USE_RESULT MaybeObject* Initialize(int capacity); |
6862 | 6905 |
6863 // Set the content of the array to the content of storage. | 6906 // Set the content of the array to the content of storage. |
6864 inline void SetContent(FixedArray* storage); | 6907 inline MaybeObject* SetContent(FixedArray* storage); |
6865 | 6908 |
6866 // Casting. | 6909 // Casting. |
6867 static inline JSArray* cast(Object* obj); | 6910 static inline JSArray* cast(Object* obj); |
6868 | 6911 |
6869 // Uses handles. Ensures that the fixed array backing the JSArray has at | 6912 // Uses handles. Ensures that the fixed array backing the JSArray has at |
6870 // least the stated size. | 6913 // least the stated size. |
6871 inline void EnsureSize(int minimum_size_of_backing_fixed_array); | 6914 inline void EnsureSize(int minimum_size_of_backing_fixed_array); |
6872 | 6915 |
6873 // Dispatched behavior. | 6916 // Dispatched behavior. |
6874 #ifdef OBJECT_PRINT | 6917 #ifdef OBJECT_PRINT |
(...skipping 559 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7434 } else { | 7477 } else { |
7435 value &= ~(1 << bit_position); | 7478 value &= ~(1 << bit_position); |
7436 } | 7479 } |
7437 return value; | 7480 return value; |
7438 } | 7481 } |
7439 }; | 7482 }; |
7440 | 7483 |
7441 } } // namespace v8::internal | 7484 } } // namespace v8::internal |
7442 | 7485 |
7443 #endif // V8_OBJECTS_H_ | 7486 #endif // V8_OBJECTS_H_ |
OLD | NEW |