Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(448)

Side by Side Diff: src/objects.h

Issue 1675223002: Mark maps having a hidden prototype rather than maps of hidden prototypes. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Addressed comment Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/mips64/builtins-mips64.cc ('k') | src/objects.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 the V8 project authors. All rights reserved. 1 // Copyright 2015 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 1284 matching lines...) Expand 10 before | Expand all | Expand 10 after
1295 ShouldThrow should_throw); 1295 ShouldThrow should_throw);
1296 1296
1297 MUST_USE_RESULT static inline MaybeHandle<Object> GetElement( 1297 MUST_USE_RESULT static inline MaybeHandle<Object> GetElement(
1298 Isolate* isolate, Handle<Object> object, uint32_t index, 1298 Isolate* isolate, Handle<Object> object, uint32_t index,
1299 LanguageMode language_mode = SLOPPY); 1299 LanguageMode language_mode = SLOPPY);
1300 1300
1301 MUST_USE_RESULT static inline MaybeHandle<Object> SetElement( 1301 MUST_USE_RESULT static inline MaybeHandle<Object> SetElement(
1302 Isolate* isolate, Handle<Object> object, uint32_t index, 1302 Isolate* isolate, Handle<Object> object, uint32_t index,
1303 Handle<Object> value, LanguageMode language_mode); 1303 Handle<Object> value, LanguageMode language_mode);
1304 1304
1305 // Get the first non-hidden prototype.
1306 static inline MaybeHandle<Object> GetPrototype(Isolate* isolate,
1307 Handle<Object> receiver);
1308
1309 MUST_USE_RESULT static Maybe<bool> HasInPrototypeChain(Isolate* isolate,
1310 Handle<Object> object,
1311 Handle<Object> proto);
1312
1313 // Returns the permanent hash code associated with this object. May return 1305 // Returns the permanent hash code associated with this object. May return
1314 // undefined if not yet created. 1306 // undefined if not yet created.
1315 Object* GetHash(); 1307 Object* GetHash();
1316 1308
1317 // Returns undefined for JSObjects, but returns the hash code for simple 1309 // Returns undefined for JSObjects, but returns the hash code for simple
1318 // objects. This avoids a double lookup in the cases where we know we will 1310 // objects. This avoids a double lookup in the cases where we know we will
1319 // add the hash to the JSObject if it does not already exist. 1311 // add the hash to the JSObject if it does not already exist.
1320 Object* GetSimpleHash(); 1312 Object* GetSimpleHash();
1321 1313
1322 // Returns the permanent hash code associated with this object depending on 1314 // Returns the permanent hash code associated with this object depending on
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
1379 1371
1380 // Prints this object with details. 1372 // Prints this object with details.
1381 void Print(std::ostream& os); // NOLINT 1373 void Print(std::ostream& os); // NOLINT
1382 #else 1374 #else
1383 void Print() { ShortPrint(); } 1375 void Print() { ShortPrint(); }
1384 void Print(std::ostream& os) { ShortPrint(os); } // NOLINT 1376 void Print(std::ostream& os) { ShortPrint(os); } // NOLINT
1385 #endif 1377 #endif
1386 1378
1387 private: 1379 private:
1388 friend class LookupIterator; 1380 friend class LookupIterator;
1389 friend class PrototypeIterator; 1381 friend class StringStream;
1390 1382
1391 // Return the map of the root of object's prototype chain. 1383 // Return the map of the root of object's prototype chain.
1392 Map* GetRootMap(Isolate* isolate); 1384 Map* GetRootMap(Isolate* isolate);
1393 1385
1394 // Helper for SetProperty and SetSuperProperty. 1386 // Helper for SetProperty and SetSuperProperty.
1395 // Return value is only meaningful if [found] is set to true on return. 1387 // Return value is only meaningful if [found] is set to true on return.
1396 MUST_USE_RESULT static Maybe<bool> SetPropertyInternal( 1388 MUST_USE_RESULT static Maybe<bool> SetPropertyInternal(
1397 LookupIterator* it, Handle<Object> value, LanguageMode language_mode, 1389 LookupIterator* it, Handle<Object> value, LanguageMode language_mode,
1398 StoreFromKeyed store_mode, bool* found); 1390 StoreFromKeyed store_mode, bool* found);
1399 1391
(...skipping 405 matching lines...) Expand 10 before | Expand all | Expand 10 after
1805 1797
1806 // ES6 section 7.1.1 ToPrimitive 1798 // ES6 section 7.1.1 ToPrimitive
1807 MUST_USE_RESULT static MaybeHandle<Object> ToPrimitive( 1799 MUST_USE_RESULT static MaybeHandle<Object> ToPrimitive(
1808 Handle<JSReceiver> receiver, 1800 Handle<JSReceiver> receiver,
1809 ToPrimitiveHint hint = ToPrimitiveHint::kDefault); 1801 ToPrimitiveHint hint = ToPrimitiveHint::kDefault);
1810 MUST_USE_RESULT static MaybeHandle<Object> OrdinaryToPrimitive( 1802 MUST_USE_RESULT static MaybeHandle<Object> OrdinaryToPrimitive(
1811 Handle<JSReceiver> receiver, OrdinaryToPrimitiveHint hint); 1803 Handle<JSReceiver> receiver, OrdinaryToPrimitiveHint hint);
1812 1804
1813 static MaybeHandle<Context> GetFunctionRealm(Handle<JSReceiver> receiver); 1805 static MaybeHandle<Context> GetFunctionRealm(Handle<JSReceiver> receiver);
1814 1806
1807 // Get the first non-hidden prototype.
1808 static inline MaybeHandle<Object> GetPrototype(Isolate* isolate,
1809 Handle<JSReceiver> receiver);
1810
1811 MUST_USE_RESULT static Maybe<bool> HasInPrototypeChain(
1812 Isolate* isolate, Handle<JSReceiver> object, Handle<Object> proto);
1813
1815 // Implementation of [[HasProperty]], ECMA-262 5th edition, section 8.12.6. 1814 // Implementation of [[HasProperty]], ECMA-262 5th edition, section 8.12.6.
1816 MUST_USE_RESULT static Maybe<bool> HasProperty(LookupIterator* it); 1815 MUST_USE_RESULT static Maybe<bool> HasProperty(LookupIterator* it);
1817 MUST_USE_RESULT static inline Maybe<bool> HasProperty( 1816 MUST_USE_RESULT static inline Maybe<bool> HasProperty(
1818 Handle<JSReceiver> object, Handle<Name> name); 1817 Handle<JSReceiver> object, Handle<Name> name);
1819 MUST_USE_RESULT static inline Maybe<bool> HasElement( 1818 MUST_USE_RESULT static inline Maybe<bool> HasElement(
1820 Handle<JSReceiver> object, uint32_t index); 1819 Handle<JSReceiver> object, uint32_t index);
1821 1820
1822 MUST_USE_RESULT static inline Maybe<bool> HasOwnProperty( 1821 MUST_USE_RESULT static inline Maybe<bool> HasOwnProperty(
1823 Handle<JSReceiver> object, Handle<Name> name); 1822 Handle<JSReceiver> object, Handle<Name> name);
1824 1823
(...skipping 3730 matching lines...) Expand 10 before | Expand all | Expand 10 after
5555 inline uint32_t bit_field3() const; 5554 inline uint32_t bit_field3() const;
5556 inline void set_bit_field3(uint32_t bits); 5555 inline void set_bit_field3(uint32_t bits);
5557 5556
5558 class EnumLengthBits: public BitField<int, 5557 class EnumLengthBits: public BitField<int,
5559 0, kDescriptorIndexBitCount> {}; // NOLINT 5558 0, kDescriptorIndexBitCount> {}; // NOLINT
5560 class NumberOfOwnDescriptorsBits: public BitField<int, 5559 class NumberOfOwnDescriptorsBits: public BitField<int,
5561 kDescriptorIndexBitCount, kDescriptorIndexBitCount> {}; // NOLINT 5560 kDescriptorIndexBitCount, kDescriptorIndexBitCount> {}; // NOLINT
5562 STATIC_ASSERT(kDescriptorIndexBitCount + kDescriptorIndexBitCount == 20); 5561 STATIC_ASSERT(kDescriptorIndexBitCount + kDescriptorIndexBitCount == 20);
5563 class DictionaryMap : public BitField<bool, 20, 1> {}; 5562 class DictionaryMap : public BitField<bool, 20, 1> {};
5564 class OwnsDescriptors : public BitField<bool, 21, 1> {}; 5563 class OwnsDescriptors : public BitField<bool, 21, 1> {};
5565 class IsHiddenPrototype : public BitField<bool, 22, 1> {}; 5564 class HasHiddenPrototype : public BitField<bool, 22, 1> {};
5566 class Deprecated : public BitField<bool, 23, 1> {}; 5565 class Deprecated : public BitField<bool, 23, 1> {};
5567 class IsUnstable : public BitField<bool, 24, 1> {}; 5566 class IsUnstable : public BitField<bool, 24, 1> {};
5568 class IsMigrationTarget : public BitField<bool, 25, 1> {}; 5567 class IsMigrationTarget : public BitField<bool, 25, 1> {};
5569 class IsStrong : public BitField<bool, 26, 1> {}; 5568 class IsStrong : public BitField<bool, 26, 1> {};
5570 class NewTargetIsBase : public BitField<bool, 27, 1> {}; 5569 class NewTargetIsBase : public BitField<bool, 27, 1> {};
5571 // Bit 28 is free. 5570 // Bit 28 is free.
5572 5571
5573 // Keep this bit field at the very end for better code in 5572 // Keep this bit field at the very end for better code in
5574 // Builtins::kJSConstructStubGeneric stub. 5573 // Builtins::kJSConstructStubGeneric stub.
5575 // This counter is used for in-object slack tracking. 5574 // This counter is used for in-object slack tracking.
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
5634 // property will not be used to create instances of the function. 5633 // property will not be used to create instances of the function.
5635 // See ECMA-262, 13.2.2. 5634 // See ECMA-262, 13.2.2.
5636 inline void set_non_instance_prototype(bool value); 5635 inline void set_non_instance_prototype(bool value);
5637 inline bool has_non_instance_prototype(); 5636 inline bool has_non_instance_prototype();
5638 5637
5639 // Tells whether the instance has a [[Construct]] internal method. 5638 // Tells whether the instance has a [[Construct]] internal method.
5640 // This property is implemented according to ES6, section 7.2.4. 5639 // This property is implemented according to ES6, section 7.2.4.
5641 inline void set_is_constructor(bool value); 5640 inline void set_is_constructor(bool value);
5642 inline bool is_constructor() const; 5641 inline bool is_constructor() const;
5643 5642
5644 // Tells whether the instance with this map should be ignored by the 5643 // Tells whether the instance with this map has a hidden prototype.
5645 // Object.getPrototypeOf() function and the __proto__ accessor. 5644 inline void set_has_hidden_prototype(bool value);
5646 inline void set_is_hidden_prototype(); 5645 inline bool has_hidden_prototype() const;
5647 inline bool is_hidden_prototype() const;
5648 5646
5649 // Records and queries whether the instance has a named interceptor. 5647 // Records and queries whether the instance has a named interceptor.
5650 inline void set_has_named_interceptor(); 5648 inline void set_has_named_interceptor();
5651 inline bool has_named_interceptor(); 5649 inline bool has_named_interceptor();
5652 5650
5653 // Records and queries whether the instance has an indexed interceptor. 5651 // Records and queries whether the instance has an indexed interceptor.
5654 inline void set_has_indexed_interceptor(); 5652 inline void set_has_indexed_interceptor();
5655 inline bool has_indexed_interceptor(); 5653 inline bool has_indexed_interceptor();
5656 5654
5657 // Tells whether the instance is undetectable. 5655 // Tells whether the instance is undetectable.
(...skipping 5136 matching lines...) Expand 10 before | Expand all | Expand 10 after
10794 } 10792 }
10795 return value; 10793 return value;
10796 } 10794 }
10797 }; 10795 };
10798 10796
10799 10797
10800 } // NOLINT, false-positive due to second-order macros. 10798 } // NOLINT, false-positive due to second-order macros.
10801 } // NOLINT, false-positive due to second-order macros. 10799 } // NOLINT, false-positive due to second-order macros.
10802 10800
10803 #endif // V8_OBJECTS_H_ 10801 #endif // V8_OBJECTS_H_
OLDNEW
« no previous file with comments | « src/mips64/builtins-mips64.cc ('k') | src/objects.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698