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

Side by Side Diff: src/objects.h

Issue 351573002: Make Object::IsFoo const. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 6 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 | Annotate | Revision Log
« no previous file with comments | « src/api.h ('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 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 "src/allocation.h" 8 #include "src/allocation.h"
9 #include "src/assert-scope.h" 9 #include "src/assert-scope.h"
10 #include "src/builtins.h" 10 #include "src/builtins.h"
(...skipping 1334 matching lines...) Expand 10 before | Expand all | Expand 10 after
1345 1345
1346 // Object is the abstract superclass for all classes in the 1346 // Object is the abstract superclass for all classes in the
1347 // object hierarchy. 1347 // object hierarchy.
1348 // Object does not use any virtual functions to avoid the 1348 // Object does not use any virtual functions to avoid the
1349 // allocation of the C++ vtable. 1349 // allocation of the C++ vtable.
1350 // Since both Smi and HeapObject are subclasses of Object no 1350 // Since both Smi and HeapObject are subclasses of Object no
1351 // data members can be present in Object. 1351 // data members can be present in Object.
1352 class Object { 1352 class Object {
1353 public: 1353 public:
1354 // Type testing. 1354 // Type testing.
1355 bool IsObject() { return true; } 1355 bool IsObject() const { return true; }
1356 1356
1357 #define IS_TYPE_FUNCTION_DECL(type_) inline bool Is##type_(); 1357 #define IS_TYPE_FUNCTION_DECL(type_) INLINE(bool Is##type_() const);
1358 OBJECT_TYPE_LIST(IS_TYPE_FUNCTION_DECL) 1358 OBJECT_TYPE_LIST(IS_TYPE_FUNCTION_DECL)
1359 HEAP_OBJECT_TYPE_LIST(IS_TYPE_FUNCTION_DECL) 1359 HEAP_OBJECT_TYPE_LIST(IS_TYPE_FUNCTION_DECL)
1360 #undef IS_TYPE_FUNCTION_DECL 1360 #undef IS_TYPE_FUNCTION_DECL
1361 1361
1362 inline bool IsFixedArrayBase(); 1362 INLINE(bool IsFixedArrayBase() const);
1363 inline bool IsExternal(); 1363 INLINE(bool IsExternal() const);
1364 inline bool IsAccessorInfo(); 1364 INLINE(bool IsAccessorInfo() const);
1365 1365
1366 inline bool IsStruct(); 1366 INLINE(bool IsStruct() const);
1367 #define DECLARE_STRUCT_PREDICATE(NAME, Name, name) inline bool Is##Name(); 1367 #define DECLARE_STRUCT_PREDICATE(NAME, Name, name) \
1368 INLINE(bool Is##Name() const);
1368 STRUCT_LIST(DECLARE_STRUCT_PREDICATE) 1369 STRUCT_LIST(DECLARE_STRUCT_PREDICATE)
1369 #undef DECLARE_STRUCT_PREDICATE 1370 #undef DECLARE_STRUCT_PREDICATE
1370 1371
1371 INLINE(bool IsSpecObject()); 1372 INLINE(bool IsSpecObject()) const;
1372 INLINE(bool IsSpecFunction()); 1373 INLINE(bool IsSpecFunction()) const;
1373 INLINE(bool IsTemplateInfo()); 1374 INLINE(bool IsTemplateInfo()) const;
1374 INLINE(bool IsNameDictionary()); 1375 INLINE(bool IsNameDictionary() const);
1375 INLINE(bool IsSeededNumberDictionary()); 1376 INLINE(bool IsSeededNumberDictionary() const);
1376 INLINE(bool IsUnseededNumberDictionary()); 1377 INLINE(bool IsUnseededNumberDictionary() const);
1377 INLINE(bool IsOrderedHashSet()); 1378 INLINE(bool IsOrderedHashSet() const);
1378 INLINE(bool IsOrderedHashMap()); 1379 INLINE(bool IsOrderedHashMap() const);
1379 bool IsCallable(); 1380 bool IsCallable() const;
1380 1381
1381 // Oddball testing. 1382 // Oddball testing.
1382 INLINE(bool IsUndefined()); 1383 INLINE(bool IsUndefined() const);
1383 INLINE(bool IsNull()); 1384 INLINE(bool IsNull() const);
1384 INLINE(bool IsTheHole()); 1385 INLINE(bool IsTheHole() const);
1385 INLINE(bool IsException()); 1386 INLINE(bool IsException() const);
1386 INLINE(bool IsUninitialized()); 1387 INLINE(bool IsUninitialized() const);
1387 INLINE(bool IsTrue()); 1388 INLINE(bool IsTrue() const);
1388 INLINE(bool IsFalse()); 1389 INLINE(bool IsFalse() const);
1389 inline bool IsArgumentsMarker(); 1390 INLINE(bool IsArgumentsMarker() const);
1390 1391
1391 // Filler objects (fillers and free space objects). 1392 // Filler objects (fillers and free space objects).
1392 inline bool IsFiller(); 1393 INLINE(bool IsFiller() const);
1393 1394
1394 // Extract the number. 1395 // Extract the number.
1395 inline double Number(); 1396 inline double Number();
1396 inline bool IsNaN(); 1397 INLINE(bool IsNaN() const);
1397 bool ToInt32(int32_t* value); 1398 bool ToInt32(int32_t* value);
1398 bool ToUint32(uint32_t* value); 1399 bool ToUint32(uint32_t* value);
1399 1400
1400 // Indicates whether OptimalRepresentation can do its work, or whether it 1401 // Indicates whether OptimalRepresentation can do its work, or whether it
1401 // always has to return Representation::Tagged(). 1402 // always has to return Representation::Tagged().
1402 enum ValueType { 1403 enum ValueType {
1403 OPTIMAL_REPRESENTATION, 1404 OPTIMAL_REPRESENTATION,
1404 FORCE_TAGGED 1405 FORCE_TAGGED
1405 }; 1406 };
1406 1407
(...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after
1675 inline void synchronized_set_map(Map* value); 1676 inline void synchronized_set_map(Map* value);
1676 inline void synchronized_set_map_no_write_barrier(Map* value); 1677 inline void synchronized_set_map_no_write_barrier(Map* value);
1677 inline void synchronized_set_map_word(MapWord map_word); 1678 inline void synchronized_set_map_word(MapWord map_word);
1678 1679
1679 // During garbage collection, the map word of a heap object does not 1680 // During garbage collection, the map word of a heap object does not
1680 // necessarily contain a map pointer. 1681 // necessarily contain a map pointer.
1681 inline MapWord map_word() const; 1682 inline MapWord map_word() const;
1682 inline void set_map_word(MapWord map_word); 1683 inline void set_map_word(MapWord map_word);
1683 1684
1684 // The Heap the object was allocated in. Used also to access Isolate. 1685 // The Heap the object was allocated in. Used also to access Isolate.
1685 inline Heap* GetHeap() const; 1686 INLINE(Heap* GetHeap() const);
Michael Starzinger 2014/06/23 20:10:27 Is there a particular system or reason behind whic
Sven Panne 2014/06/24 06:10:23 The system was simply: Change every signature wher
1686 1687
1687 // Convenience method to get current isolate. 1688 // Convenience method to get current isolate.
1688 inline Isolate* GetIsolate(); 1689 INLINE(Isolate* GetIsolate() const);
1689 1690
1690 // Converts an address to a HeapObject pointer. 1691 // Converts an address to a HeapObject pointer.
1691 static inline HeapObject* FromAddress(Address address); 1692 static inline HeapObject* FromAddress(Address address);
1692 1693
1693 // Returns the address of this HeapObject. 1694 // Returns the address of this HeapObject.
1694 inline Address address(); 1695 inline Address address();
1695 1696
1696 // Iterates over pointers contained in the object (including the Map) 1697 // Iterates over pointers contained in the object (including the Map)
1697 void Iterate(ObjectVisitor* v); 1698 void Iterate(ObjectVisitor* v);
1698 1699
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
1808 HeapObject::RawField(obj, object_size)); 1809 HeapObject::RawField(obj, object_size));
1809 } 1810 }
1810 }; 1811 };
1811 1812
1812 1813
1813 // The HeapNumber class describes heap allocated numbers that cannot be 1814 // The HeapNumber class describes heap allocated numbers that cannot be
1814 // represented in a Smi (small integer) 1815 // represented in a Smi (small integer)
1815 class HeapNumber: public HeapObject { 1816 class HeapNumber: public HeapObject {
1816 public: 1817 public:
1817 // [value]: number value. 1818 // [value]: number value.
1818 inline double value(); 1819 INLINE(double value() const);
Michael Starzinger 2014/06/23 20:10:27 Especially this one looks pretty random at first g
Sven Panne 2014/06/24 06:10:23 Rationale: See above.
1819 inline void set_value(double value); 1820 inline void set_value(double value);
1820 1821
1821 DECLARE_CAST(HeapNumber) 1822 DECLARE_CAST(HeapNumber)
1822 1823
1823 // Dispatched behavior. 1824 // Dispatched behavior.
1824 bool HeapNumberBooleanValue(); 1825 bool HeapNumberBooleanValue();
1825 1826
1826 void HeapNumberPrint(FILE* out = stdout); 1827 void HeapNumberPrint(FILE* out = stdout);
1827 void HeapNumberPrint(StringStream* accumulator); 1828 void HeapNumberPrint(StringStream* accumulator);
1828 DECLARE_VERIFIER(HeapNumber) 1829 DECLARE_VERIFIER(HeapNumber)
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
1964 Handle<Name> name); 1965 Handle<Name> name);
1965 1966
1966 static inline PropertyAttributes GetElementAttribute( 1967 static inline PropertyAttributes GetElementAttribute(
1967 Handle<JSReceiver> object, 1968 Handle<JSReceiver> object,
1968 uint32_t index); 1969 uint32_t index);
1969 static inline PropertyAttributes GetOwnElementAttribute( 1970 static inline PropertyAttributes GetOwnElementAttribute(
1970 Handle<JSReceiver> object, 1971 Handle<JSReceiver> object,
1971 uint32_t index); 1972 uint32_t index);
1972 1973
1973 // Return the object's prototype (might be Heap::null_value()). 1974 // Return the object's prototype (might be Heap::null_value()).
1974 inline Object* GetPrototype(); 1975 INLINE(Object* GetPrototype() const);
1975 1976
1976 // Return the constructor function (may be Heap::null_value()). 1977 // Return the constructor function (may be Heap::null_value()).
1977 inline Object* GetConstructor(); 1978 inline Object* GetConstructor();
1978 1979
1979 // Retrieves a permanent object identity hash code. The undefined value might 1980 // Retrieves a permanent object identity hash code. The undefined value might
1980 // be returned in case no hash was created yet. 1981 // be returned in case no hash was created yet.
1981 inline Object* GetIdentityHash(); 1982 inline Object* GetIdentityHash();
1982 1983
1983 // Retrieves a permanent object identity hash code. May create and store a 1984 // Retrieves a permanent object identity hash code. May create and store a
1984 // hash code if needed and none exists. 1985 // hash code if needed and none exists.
(...skipping 2788 matching lines...) Expand 10 before | Expand all | Expand 10 after
4773 static Handle<NormalizedMapCache> New(Isolate* isolate); 4774 static Handle<NormalizedMapCache> New(Isolate* isolate);
4774 4775
4775 MUST_USE_RESULT MaybeHandle<Map> Get(Handle<Map> fast_map, 4776 MUST_USE_RESULT MaybeHandle<Map> Get(Handle<Map> fast_map,
4776 PropertyNormalizationMode mode); 4777 PropertyNormalizationMode mode);
4777 void Set(Handle<Map> fast_map, Handle<Map> normalized_map); 4778 void Set(Handle<Map> fast_map, Handle<Map> normalized_map);
4778 4779
4779 void Clear(); 4780 void Clear();
4780 4781
4781 DECLARE_CAST(NormalizedMapCache) 4782 DECLARE_CAST(NormalizedMapCache)
4782 4783
4783 static inline bool IsNormalizedMapCache(Object* obj); 4784 INLINE(static bool IsNormalizedMapCache(const Object* obj));
4784 4785
4785 DECLARE_VERIFIER(NormalizedMapCache) 4786 DECLARE_VERIFIER(NormalizedMapCache)
4786 private: 4787 private:
4787 static const int kEntries = 64; 4788 static const int kEntries = 64;
4788 4789
4789 static inline int GetIndex(Handle<Map> map); 4790 static inline int GetIndex(Handle<Map> map);
4790 4791
4791 // The following declarations hide base class methods. 4792 // The following declarations hide base class methods.
4792 Object* get(int index); 4793 Object* get(int index);
4793 void set(int index, Object* value); 4794 void set(int index, Object* value);
(...skipping 3007 matching lines...) Expand 10 before | Expand all | Expand 10 after
7801 public: 7802 public:
7802 // [native_context]: the owner native context of this global proxy object. 7803 // [native_context]: the owner native context of this global proxy object.
7803 // It is null value if this object is not used by any context. 7804 // It is null value if this object is not used by any context.
7804 DECL_ACCESSORS(native_context, Object) 7805 DECL_ACCESSORS(native_context, Object)
7805 7806
7806 // [hash]: The hash code property (undefined if not initialized yet). 7807 // [hash]: The hash code property (undefined if not initialized yet).
7807 DECL_ACCESSORS(hash, Object) 7808 DECL_ACCESSORS(hash, Object)
7808 7809
7809 DECLARE_CAST(JSGlobalProxy) 7810 DECLARE_CAST(JSGlobalProxy)
7810 7811
7811 inline bool IsDetachedFrom(GlobalObject* global); 7812 INLINE(bool IsDetachedFrom(GlobalObject* global) const);
7812 7813
7813 // Dispatched behavior. 7814 // Dispatched behavior.
7814 DECLARE_PRINTER(JSGlobalProxy) 7815 DECLARE_PRINTER(JSGlobalProxy)
7815 DECLARE_VERIFIER(JSGlobalProxy) 7816 DECLARE_VERIFIER(JSGlobalProxy)
7816 7817
7817 // Layout description. 7818 // Layout description.
7818 static const int kNativeContextOffset = JSObject::kHeaderSize; 7819 static const int kNativeContextOffset = JSObject::kHeaderSize;
7819 static const int kHashOffset = kNativeContextOffset + kPointerSize; 7820 static const int kHashOffset = kNativeContextOffset + kPointerSize;
7820 static const int kSize = kHashOffset + kPointerSize; 7821 static const int kSize = kHashOffset + kPointerSize;
7821 7822
(...skipping 975 matching lines...) Expand 10 before | Expand all | Expand 10 after
8797 // the shape of the string is given its own class so that it can be retrieved 8798 // the shape of the string is given its own class so that it can be retrieved
8798 // once and used for several string operations. A StringShape is small enough 8799 // once and used for several string operations. A StringShape is small enough
8799 // to be passed by value and is immutable, but be aware that flattening a 8800 // to be passed by value and is immutable, but be aware that flattening a
8800 // string can potentially alter its shape. Also be aware that a GC caused by 8801 // string can potentially alter its shape. Also be aware that a GC caused by
8801 // something else can alter the shape of a string due to ConsString 8802 // something else can alter the shape of a string due to ConsString
8802 // shortcutting. Keeping these restrictions in mind has proven to be error- 8803 // shortcutting. Keeping these restrictions in mind has proven to be error-
8803 // prone and so we no longer put StringShapes in variables unless there is a 8804 // prone and so we no longer put StringShapes in variables unless there is a
8804 // concrete performance benefit at that particular point in the code. 8805 // concrete performance benefit at that particular point in the code.
8805 class StringShape BASE_EMBEDDED { 8806 class StringShape BASE_EMBEDDED {
8806 public: 8807 public:
8807 inline explicit StringShape(String* s); 8808 INLINE(explicit StringShape(const String* s));
8808 inline explicit StringShape(Map* s); 8809 inline explicit StringShape(Map* s);
8809 inline explicit StringShape(InstanceType t); 8810 inline explicit StringShape(InstanceType t);
8810 inline bool IsSequential(); 8811 inline bool IsSequential();
8811 inline bool IsExternal(); 8812 inline bool IsExternal();
8812 inline bool IsCons(); 8813 inline bool IsCons();
8813 inline bool IsSliced(); 8814 inline bool IsSliced();
8814 inline bool IsIndirect(); 8815 inline bool IsIndirect();
8815 inline bool IsExternalAscii(); 8816 inline bool IsExternalAscii();
8816 inline bool IsExternalTwoByte(); 8817 inline bool IsExternalTwoByte();
8817 inline bool IsSequentialAscii(); 8818 inline bool IsSequentialAscii();
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after
9056 9057
9057 // Get and set the length of the string using acquire loads and release 9058 // Get and set the length of the string using acquire loads and release
9058 // stores. 9059 // stores.
9059 inline int synchronized_length() const; 9060 inline int synchronized_length() const;
9060 inline void synchronized_set_length(int value); 9061 inline void synchronized_set_length(int value);
9061 9062
9062 // Returns whether this string has only ASCII chars, i.e. all of them can 9063 // Returns whether this string has only ASCII chars, i.e. all of them can
9063 // be ASCII encoded. This might be the case even if the string is 9064 // be ASCII encoded. This might be the case even if the string is
9064 // two-byte. Such strings may appear when the embedder prefers 9065 // two-byte. Such strings may appear when the embedder prefers
9065 // two-byte external representations even for ASCII data. 9066 // two-byte external representations even for ASCII data.
9066 inline bool IsOneByteRepresentation(); 9067 INLINE(bool IsOneByteRepresentation() const);
9067 inline bool IsTwoByteRepresentation(); 9068 INLINE(bool IsTwoByteRepresentation() const);
9068 9069
9069 // Cons and slices have an encoding flag that may not represent the actual 9070 // Cons and slices have an encoding flag that may not represent the actual
9070 // encoding of the underlying string. This is taken into account here. 9071 // encoding of the underlying string. This is taken into account here.
9071 // Requires: this->IsFlat() 9072 // Requires: this->IsFlat()
9072 inline bool IsOneByteRepresentationUnderneath(); 9073 inline bool IsOneByteRepresentationUnderneath();
9073 inline bool IsTwoByteRepresentationUnderneath(); 9074 inline bool IsTwoByteRepresentationUnderneath();
9074 9075
9075 // NOTE: this should be considered only a hint. False negatives are 9076 // NOTE: this should be considered only a hint. False negatives are
9076 // possible. 9077 // possible.
9077 inline bool HasOnlyOneByteChars(); 9078 inline bool HasOnlyOneByteChars();
(...skipping 647 matching lines...) Expand 10 before | Expand all | Expand 10 after
9725 9726
9726 // The Oddball describes objects null, undefined, true, and false. 9727 // The Oddball describes objects null, undefined, true, and false.
9727 class Oddball: public HeapObject { 9728 class Oddball: public HeapObject {
9728 public: 9729 public:
9729 // [to_string]: Cached to_string computed at startup. 9730 // [to_string]: Cached to_string computed at startup.
9730 DECL_ACCESSORS(to_string, String) 9731 DECL_ACCESSORS(to_string, String)
9731 9732
9732 // [to_number]: Cached to_number computed at startup. 9733 // [to_number]: Cached to_number computed at startup.
9733 DECL_ACCESSORS(to_number, Object) 9734 DECL_ACCESSORS(to_number, Object)
9734 9735
9735 inline byte kind(); 9736 INLINE(byte kind() const);
9736 inline void set_kind(byte kind); 9737 inline void set_kind(byte kind);
9737 9738
9738 DECLARE_CAST(Oddball) 9739 DECLARE_CAST(Oddball)
9739 9740
9740 // Dispatched behavior. 9741 // Dispatched behavior.
9741 DECLARE_VERIFIER(Oddball) 9742 DECLARE_VERIFIER(Oddball)
9742 9743
9743 // Initialize the fields. 9744 // Initialize the fields.
9744 static void Initialize(Isolate* isolate, 9745 static void Initialize(Isolate* isolate,
9745 Handle<Oddball> oddball, 9746 Handle<Oddball> oddball,
(...skipping 1400 matching lines...) Expand 10 before | Expand all | Expand 10 after
11146 } else { 11147 } else {
11147 value &= ~(1 << bit_position); 11148 value &= ~(1 << bit_position);
11148 } 11149 }
11149 return value; 11150 return value;
11150 } 11151 }
11151 }; 11152 };
11152 11153
11153 } } // namespace v8::internal 11154 } } // namespace v8::internal
11154 11155
11155 #endif // V8_OBJECTS_H_ 11156 #endif // V8_OBJECTS_H_
OLDNEW
« no previous file with comments | « src/api.h ('k') | src/objects.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698