Make our FOO::cast methods const.

R=mstarzinger@chromium.org

Review URL: https://codereview.chromium.org/347073003

git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@21916 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent 100b9d83
...@@ -60,10 +60,17 @@ PropertyDetails PropertyDetails::AsDeleted() const { ...@@ -60,10 +60,17 @@ PropertyDetails PropertyDetails::AsDeleted() const {
} }
#define CAST_ACCESSOR(type) \ // TODO(svenpanne) We use const_cast here and at a few other places to break our
type* type::cast(Object* object) { \ // dependency cycle between the cast methods and the predicates. This can be
SLOW_ASSERT(object->Is##type()); \ // removed when the predicates are const-correct, too.
return reinterpret_cast<type*>(object); \ #define CAST_ACCESSOR(type) \
type* type::cast(Object* object) { \
SLOW_ASSERT(object->Is##type()); \
return reinterpret_cast<type*>(object); \
} \
const type* type::cast(const Object* object) { \
SLOW_ASSERT(const_cast<Object*>(object)->Is##type()); \
return reinterpret_cast<const type*>(object); \
} }
...@@ -821,12 +828,32 @@ bool Object::IsHashTable() { ...@@ -821,12 +828,32 @@ bool Object::IsHashTable() {
} }
bool Object::IsWeakHashTable() {
return IsHashTable();
}
bool Object::IsDictionary() { bool Object::IsDictionary() {
return IsHashTable() && return IsHashTable() &&
this != HeapObject::cast(this)->GetHeap()->string_table(); this != HeapObject::cast(this)->GetHeap()->string_table();
} }
bool Object::IsNameDictionary() {
return IsDictionary();
}
bool Object::IsSeededNumberDictionary() {
return IsDictionary();
}
bool Object::IsUnseededNumberDictionary() {
return IsDictionary();
}
bool Object::IsStringTable() { bool Object::IsStringTable() {
return IsHashTable(); return IsHashTable();
} }
...@@ -907,6 +934,16 @@ bool Object::IsOrderedHashTable() { ...@@ -907,6 +934,16 @@ bool Object::IsOrderedHashTable() {
} }
bool Object::IsOrderedHashSet() {
return IsOrderedHashTable();
}
bool Object::IsOrderedHashMap() {
return IsOrderedHashTable();
}
bool Object::IsPrimitive() { bool Object::IsPrimitive() {
return IsOddball() || IsNumber() || IsString(); return IsOddball() || IsNumber() || IsString();
} }
...@@ -2101,12 +2138,6 @@ void Object::VerifyApiCallResultType() { ...@@ -2101,12 +2138,6 @@ void Object::VerifyApiCallResultType() {
} }
FixedArrayBase* FixedArrayBase::cast(Object* object) {
ASSERT(object->IsFixedArrayBase());
return reinterpret_cast<FixedArrayBase*>(object);
}
Object* FixedArray::get(int index) { Object* FixedArray::get(int index) {
SLOW_ASSERT(index >= 0 && index < this->length()); SLOW_ASSERT(index >= 0 && index < this->length());
return READ_FIELD(this, kHeaderSize + index * kPointerSize); return READ_FIELD(this, kHeaderSize + index * kPointerSize);
...@@ -3016,84 +3047,109 @@ void SeededNumberDictionary::set_requires_slow_elements() { ...@@ -3016,84 +3047,109 @@ void SeededNumberDictionary::set_requires_slow_elements() {
// Cast operations // Cast operations
CAST_ACCESSOR(FixedArray) CAST_ACCESSOR(AccessorInfo)
CAST_ACCESSOR(FixedDoubleArray) CAST_ACCESSOR(ByteArray)
CAST_ACCESSOR(FixedTypedArrayBase) CAST_ACCESSOR(Cell)
CAST_ACCESSOR(Code)
CAST_ACCESSOR(CodeCacheHashTable)
CAST_ACCESSOR(CompilationCacheTable)
CAST_ACCESSOR(ConsString)
CAST_ACCESSOR(ConstantPoolArray) CAST_ACCESSOR(ConstantPoolArray)
CAST_ACCESSOR(DescriptorArray)
CAST_ACCESSOR(DeoptimizationInputData) CAST_ACCESSOR(DeoptimizationInputData)
CAST_ACCESSOR(DeoptimizationOutputData) CAST_ACCESSOR(DeoptimizationOutputData)
CAST_ACCESSOR(DependentCode) CAST_ACCESSOR(DependentCode)
CAST_ACCESSOR(StringTable) CAST_ACCESSOR(DescriptorArray)
CAST_ACCESSOR(JSFunctionResultCache) CAST_ACCESSOR(ExternalArray)
CAST_ACCESSOR(NormalizedMapCache)
CAST_ACCESSOR(ScopeInfo)
CAST_ACCESSOR(CompilationCacheTable)
CAST_ACCESSOR(CodeCacheHashTable)
CAST_ACCESSOR(PolymorphicCodeCacheHashTable)
CAST_ACCESSOR(MapCache)
CAST_ACCESSOR(String)
CAST_ACCESSOR(SeqString)
CAST_ACCESSOR(SeqOneByteString)
CAST_ACCESSOR(SeqTwoByteString)
CAST_ACCESSOR(SlicedString)
CAST_ACCESSOR(ConsString)
CAST_ACCESSOR(ExternalString)
CAST_ACCESSOR(ExternalAsciiString) CAST_ACCESSOR(ExternalAsciiString)
CAST_ACCESSOR(ExternalFloat32Array)
CAST_ACCESSOR(ExternalFloat64Array)
CAST_ACCESSOR(ExternalInt16Array)
CAST_ACCESSOR(ExternalInt32Array)
CAST_ACCESSOR(ExternalInt8Array)
CAST_ACCESSOR(ExternalString)
CAST_ACCESSOR(ExternalTwoByteString) CAST_ACCESSOR(ExternalTwoByteString)
CAST_ACCESSOR(Symbol) CAST_ACCESSOR(ExternalUint16Array)
CAST_ACCESSOR(Name) CAST_ACCESSOR(ExternalUint32Array)
CAST_ACCESSOR(JSReceiver) CAST_ACCESSOR(ExternalUint8Array)
CAST_ACCESSOR(JSObject) CAST_ACCESSOR(ExternalUint8ClampedArray)
CAST_ACCESSOR(Smi) CAST_ACCESSOR(FixedArray)
CAST_ACCESSOR(HeapObject) CAST_ACCESSOR(FixedArrayBase)
CAST_ACCESSOR(HeapNumber) CAST_ACCESSOR(FixedDoubleArray)
CAST_ACCESSOR(Oddball) CAST_ACCESSOR(FixedTypedArrayBase)
CAST_ACCESSOR(Cell) CAST_ACCESSOR(Foreign)
CAST_ACCESSOR(PropertyCell) CAST_ACCESSOR(FreeSpace)
CAST_ACCESSOR(SharedFunctionInfo)
CAST_ACCESSOR(Map)
CAST_ACCESSOR(JSFunction)
CAST_ACCESSOR(GlobalObject) CAST_ACCESSOR(GlobalObject)
CAST_ACCESSOR(JSGlobalProxy) CAST_ACCESSOR(HeapNumber)
CAST_ACCESSOR(JSGlobalObject) CAST_ACCESSOR(HeapObject)
CAST_ACCESSOR(JSBuiltinsObject)
CAST_ACCESSOR(Code)
CAST_ACCESSOR(JSArray) CAST_ACCESSOR(JSArray)
CAST_ACCESSOR(JSArrayBuffer) CAST_ACCESSOR(JSArrayBuffer)
CAST_ACCESSOR(JSArrayBufferView) CAST_ACCESSOR(JSArrayBufferView)
CAST_ACCESSOR(JSTypedArray) CAST_ACCESSOR(JSBuiltinsObject)
CAST_ACCESSOR(JSDataView) CAST_ACCESSOR(JSDataView)
CAST_ACCESSOR(JSRegExp) CAST_ACCESSOR(JSDate)
CAST_ACCESSOR(JSProxy) CAST_ACCESSOR(JSFunction)
CAST_ACCESSOR(JSFunctionProxy) CAST_ACCESSOR(JSFunctionProxy)
CAST_ACCESSOR(JSSet) CAST_ACCESSOR(JSFunctionResultCache)
CAST_ACCESSOR(JSGeneratorObject)
CAST_ACCESSOR(JSGlobalObject)
CAST_ACCESSOR(JSGlobalProxy)
CAST_ACCESSOR(JSMap) CAST_ACCESSOR(JSMap)
CAST_ACCESSOR(JSSetIterator)
CAST_ACCESSOR(JSMapIterator) CAST_ACCESSOR(JSMapIterator)
CAST_ACCESSOR(JSMessageObject)
CAST_ACCESSOR(JSModule)
CAST_ACCESSOR(JSObject)
CAST_ACCESSOR(JSProxy)
CAST_ACCESSOR(JSReceiver)
CAST_ACCESSOR(JSRegExp)
CAST_ACCESSOR(JSSet)
CAST_ACCESSOR(JSSetIterator)
CAST_ACCESSOR(JSTypedArray)
CAST_ACCESSOR(JSValue)
CAST_ACCESSOR(JSWeakMap) CAST_ACCESSOR(JSWeakMap)
CAST_ACCESSOR(JSWeakSet) CAST_ACCESSOR(JSWeakSet)
CAST_ACCESSOR(Foreign) CAST_ACCESSOR(Map)
CAST_ACCESSOR(ByteArray) CAST_ACCESSOR(MapCache)
CAST_ACCESSOR(FreeSpace) CAST_ACCESSOR(Name)
CAST_ACCESSOR(ExternalArray) CAST_ACCESSOR(NameDictionary)
CAST_ACCESSOR(ExternalInt8Array) CAST_ACCESSOR(NormalizedMapCache)
CAST_ACCESSOR(ExternalUint8Array) CAST_ACCESSOR(Object)
CAST_ACCESSOR(ExternalInt16Array) CAST_ACCESSOR(ObjectHashTable)
CAST_ACCESSOR(ExternalUint16Array) CAST_ACCESSOR(Oddball)
CAST_ACCESSOR(ExternalInt32Array) CAST_ACCESSOR(OrderedHashMap)
CAST_ACCESSOR(ExternalUint32Array) CAST_ACCESSOR(OrderedHashSet)
CAST_ACCESSOR(ExternalFloat32Array) CAST_ACCESSOR(PolymorphicCodeCacheHashTable)
CAST_ACCESSOR(ExternalFloat64Array) CAST_ACCESSOR(PropertyCell)
CAST_ACCESSOR(ExternalUint8ClampedArray) CAST_ACCESSOR(ScopeInfo)
CAST_ACCESSOR(SeededNumberDictionary)
CAST_ACCESSOR(SeqOneByteString)
CAST_ACCESSOR(SeqString)
CAST_ACCESSOR(SeqTwoByteString)
CAST_ACCESSOR(SharedFunctionInfo)
CAST_ACCESSOR(SlicedString)
CAST_ACCESSOR(Smi)
CAST_ACCESSOR(String)
CAST_ACCESSOR(StringTable)
CAST_ACCESSOR(Struct) CAST_ACCESSOR(Struct)
CAST_ACCESSOR(AccessorInfo) CAST_ACCESSOR(Symbol)
CAST_ACCESSOR(UnseededNumberDictionary)
CAST_ACCESSOR(WeakHashTable)
template <class Traits> template <class Traits>
FixedTypedArray<Traits>* FixedTypedArray<Traits>::cast(Object* object) { FixedTypedArray<Traits>* FixedTypedArray<Traits>::cast(Object* object) {
SLOW_ASSERT(object->IsHeapObject() && SLOW_ASSERT(object->IsHeapObject() &&
HeapObject::cast(object)->map()->instance_type() == HeapObject::cast(object)->map()->instance_type() ==
Traits::kInstanceType); Traits::kInstanceType);
return reinterpret_cast<FixedTypedArray<Traits>*>(object);
}
template <class Traits>
const FixedTypedArray<Traits>*
FixedTypedArray<Traits>::cast(const Object* object) {
SLOW_ASSERT(const_cast<Object*>(object)->IsHeapObject() &&
HeapObject::cast(object)->map()->instance_type() ==
Traits::kInstanceType);
return reinterpret_cast<FixedTypedArray<Traits>*>(object); return reinterpret_cast<FixedTypedArray<Traits>*>(object);
} }
...@@ -3106,11 +3162,19 @@ FixedTypedArray<Traits>* FixedTypedArray<Traits>::cast(Object* object) { ...@@ -3106,11 +3162,19 @@ FixedTypedArray<Traits>* FixedTypedArray<Traits>::cast(Object* object) {
template <typename Derived, typename Shape, typename Key> template <typename Derived, typename Shape, typename Key>
HashTable<Derived, Shape, Key>* HashTable<Derived, Shape, Key>*
HashTable<Derived, Shape, Key>::cast(Object* obj) { HashTable<Derived, Shape, Key>::cast(Object* obj) {
ASSERT(obj->IsHashTable()); SLOW_ASSERT(obj->IsHashTable());
return reinterpret_cast<HashTable*>(obj); return reinterpret_cast<HashTable*>(obj);
} }
template <typename Derived, typename Shape, typename Key>
const HashTable<Derived, Shape, Key>*
HashTable<Derived, Shape, Key>::cast(const Object* obj) {
SLOW_ASSERT(const_cast<Object*>(obj)->IsHashTable());
return reinterpret_cast<const HashTable*>(obj);
}
SMI_ACCESSORS(FixedArrayBase, length, kLengthOffset) SMI_ACCESSORS(FixedArrayBase, length, kLengthOffset)
SYNCHRONIZED_SMI_ACCESSORS(FixedArrayBase, length, kLengthOffset) SYNCHRONIZED_SMI_ACCESSORS(FixedArrayBase, length, kLengthOffset)
...@@ -5883,34 +5947,13 @@ bool JSGeneratorObject::is_executing() { ...@@ -5883,34 +5947,13 @@ bool JSGeneratorObject::is_executing() {
return continuation() == kGeneratorExecuting; return continuation() == kGeneratorExecuting;
} }
JSGeneratorObject* JSGeneratorObject::cast(Object* obj) {
ASSERT(obj->IsJSGeneratorObject());
ASSERT(HeapObject::cast(obj)->Size() == JSGeneratorObject::kSize);
return reinterpret_cast<JSGeneratorObject*>(obj);
}
ACCESSORS(JSModule, context, Object, kContextOffset) ACCESSORS(JSModule, context, Object, kContextOffset)
ACCESSORS(JSModule, scope_info, ScopeInfo, kScopeInfoOffset) ACCESSORS(JSModule, scope_info, ScopeInfo, kScopeInfoOffset)
JSModule* JSModule::cast(Object* obj) {
ASSERT(obj->IsJSModule());
ASSERT(HeapObject::cast(obj)->Size() == JSModule::kSize);
return reinterpret_cast<JSModule*>(obj);
}
ACCESSORS(JSValue, value, Object, kValueOffset) ACCESSORS(JSValue, value, Object, kValueOffset)
JSValue* JSValue::cast(Object* obj) {
ASSERT(obj->IsJSValue());
ASSERT(HeapObject::cast(obj)->Size() == JSValue::kSize);
return reinterpret_cast<JSValue*>(obj);
}
ACCESSORS(JSDate, value, Object, kValueOffset) ACCESSORS(JSDate, value, Object, kValueOffset)
ACCESSORS(JSDate, cache_stamp, Object, kCacheStampOffset) ACCESSORS(JSDate, cache_stamp, Object, kCacheStampOffset)
ACCESSORS(JSDate, year, Object, kYearOffset) ACCESSORS(JSDate, year, Object, kYearOffset)
...@@ -5922,13 +5965,6 @@ ACCESSORS(JSDate, min, Object, kMinOffset) ...@@ -5922,13 +5965,6 @@ ACCESSORS(JSDate, min, Object, kMinOffset)
ACCESSORS(JSDate, sec, Object, kSecOffset) ACCESSORS(JSDate, sec, Object, kSecOffset)
JSDate* JSDate::cast(Object* obj) {
ASSERT(obj->IsJSDate());
ASSERT(HeapObject::cast(obj)->Size() == JSDate::kSize);
return reinterpret_cast<JSDate*>(obj);
}
ACCESSORS(JSMessageObject, type, String, kTypeOffset) ACCESSORS(JSMessageObject, type, String, kTypeOffset)
ACCESSORS(JSMessageObject, arguments, JSArray, kArgumentsOffset) ACCESSORS(JSMessageObject, arguments, JSArray, kArgumentsOffset)
ACCESSORS(JSMessageObject, script, Object, kScriptOffset) ACCESSORS(JSMessageObject, script, Object, kScriptOffset)
...@@ -5937,13 +5973,6 @@ SMI_ACCESSORS(JSMessageObject, start_position, kStartPositionOffset) ...@@ -5937,13 +5973,6 @@ SMI_ACCESSORS(JSMessageObject, start_position, kStartPositionOffset)
SMI_ACCESSORS(JSMessageObject, end_position, kEndPositionOffset) SMI_ACCESSORS(JSMessageObject, end_position, kEndPositionOffset)
JSMessageObject* JSMessageObject::cast(Object* obj) {
ASSERT(obj->IsJSMessageObject());
ASSERT(HeapObject::cast(obj)->Size() == JSMessageObject::kSize);
return reinterpret_cast<JSMessageObject*>(obj);
}
INT_ACCESSORS(Code, instruction_size, kInstructionSizeOffset) INT_ACCESSORS(Code, instruction_size, kInstructionSizeOffset)
INT_ACCESSORS(Code, prologue_offset, kPrologueOffset) INT_ACCESSORS(Code, prologue_offset, kPrologueOffset)
ACCESSORS(Code, relocation_info, ByteArray, kRelocationInfoOffset) ACCESSORS(Code, relocation_info, ByteArray, kRelocationInfoOffset)
......
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment