| Index: src/objects-inl.h
|
| diff --git a/src/objects-inl.h b/src/objects-inl.h
|
| index 291c3c843940dc8b7e853d329816161b3f26ef8c..afbe639eab9d072169039a27c3c0f14f7e1347e3 100644
|
| --- a/src/objects-inl.h
|
| +++ b/src/objects-inl.h
|
| @@ -67,6 +67,13 @@ PropertyDetails PropertyDetails::AsDeleted() {
|
| }
|
|
|
|
|
| +#define TYPE_CHECKER(type, instancetype) \
|
| + bool Object::Is##type() { \
|
| + return Object::IsHeapObject() && \
|
| + HeapObject::cast(this)->map()->instance_type() == instancetype; \
|
| + }
|
| +
|
| +
|
| #define CAST_ACCESSOR(type) \
|
| type* type::cast(Object* object) { \
|
| ASSERT(object->Is##type()); \
|
| @@ -147,10 +154,7 @@ bool Object::NonFailureIsHeapObject() {
|
| }
|
|
|
|
|
| -bool Object::IsHeapNumber() {
|
| - return Object::IsHeapObject()
|
| - && HeapObject::cast(this)->map()->instance_type() == HEAP_NUMBER_TYPE;
|
| -}
|
| +TYPE_CHECKER(HeapNumber, HEAP_NUMBER_TYPE)
|
|
|
|
|
| bool Object::IsString() {
|
| @@ -403,16 +407,8 @@ bool Object::IsNumber() {
|
| }
|
|
|
|
|
| -bool Object::IsByteArray() {
|
| - return Object::IsHeapObject()
|
| - && HeapObject::cast(this)->map()->instance_type() == BYTE_ARRAY_TYPE;
|
| -}
|
| -
|
| -
|
| -bool Object::IsFreeSpace() {
|
| - return Object::IsHeapObject()
|
| - && HeapObject::cast(this)->map()->instance_type() == FREE_SPACE_TYPE;
|
| -}
|
| +TYPE_CHECKER(ByteArray, BYTE_ARRAY_TYPE)
|
| +TYPE_CHECKER(FreeSpace, FREE_SPACE_TYPE)
|
|
|
|
|
| bool Object::IsFiller() {
|
| @@ -422,11 +418,7 @@ bool Object::IsFiller() {
|
| }
|
|
|
|
|
| -bool Object::IsExternalPixelArray() {
|
| - return Object::IsHeapObject() &&
|
| - HeapObject::cast(this)->map()->instance_type() ==
|
| - EXTERNAL_PIXEL_ARRAY_TYPE;
|
| -}
|
| +TYPE_CHECKER(ExternalPixelArray, EXTERNAL_PIXEL_ARRAY_TYPE)
|
|
|
|
|
| bool Object::IsExternalArray() {
|
| @@ -439,60 +431,14 @@ bool Object::IsExternalArray() {
|
| }
|
|
|
|
|
| -bool Object::IsExternalByteArray() {
|
| - return Object::IsHeapObject() &&
|
| - HeapObject::cast(this)->map()->instance_type() ==
|
| - EXTERNAL_BYTE_ARRAY_TYPE;
|
| -}
|
| -
|
| -
|
| -bool Object::IsExternalUnsignedByteArray() {
|
| - return Object::IsHeapObject() &&
|
| - HeapObject::cast(this)->map()->instance_type() ==
|
| - EXTERNAL_UNSIGNED_BYTE_ARRAY_TYPE;
|
| -}
|
| -
|
| -
|
| -bool Object::IsExternalShortArray() {
|
| - return Object::IsHeapObject() &&
|
| - HeapObject::cast(this)->map()->instance_type() ==
|
| - EXTERNAL_SHORT_ARRAY_TYPE;
|
| -}
|
| -
|
| -
|
| -bool Object::IsExternalUnsignedShortArray() {
|
| - return Object::IsHeapObject() &&
|
| - HeapObject::cast(this)->map()->instance_type() ==
|
| - EXTERNAL_UNSIGNED_SHORT_ARRAY_TYPE;
|
| -}
|
| -
|
| -
|
| -bool Object::IsExternalIntArray() {
|
| - return Object::IsHeapObject() &&
|
| - HeapObject::cast(this)->map()->instance_type() ==
|
| - EXTERNAL_INT_ARRAY_TYPE;
|
| -}
|
| -
|
| -
|
| -bool Object::IsExternalUnsignedIntArray() {
|
| - return Object::IsHeapObject() &&
|
| - HeapObject::cast(this)->map()->instance_type() ==
|
| - EXTERNAL_UNSIGNED_INT_ARRAY_TYPE;
|
| -}
|
| -
|
| -
|
| -bool Object::IsExternalFloatArray() {
|
| - return Object::IsHeapObject() &&
|
| - HeapObject::cast(this)->map()->instance_type() ==
|
| - EXTERNAL_FLOAT_ARRAY_TYPE;
|
| -}
|
| -
|
| -
|
| -bool Object::IsExternalDoubleArray() {
|
| - return Object::IsHeapObject() &&
|
| - HeapObject::cast(this)->map()->instance_type() ==
|
| - EXTERNAL_DOUBLE_ARRAY_TYPE;
|
| -}
|
| +TYPE_CHECKER(ExternalByteArray, EXTERNAL_BYTE_ARRAY_TYPE)
|
| +TYPE_CHECKER(ExternalUnsignedByteArray, EXTERNAL_UNSIGNED_BYTE_ARRAY_TYPE)
|
| +TYPE_CHECKER(ExternalShortArray, EXTERNAL_SHORT_ARRAY_TYPE)
|
| +TYPE_CHECKER(ExternalUnsignedShortArray, EXTERNAL_UNSIGNED_SHORT_ARRAY_TYPE)
|
| +TYPE_CHECKER(ExternalIntArray, EXTERNAL_INT_ARRAY_TYPE)
|
| +TYPE_CHECKER(ExternalUnsignedIntArray, EXTERNAL_UNSIGNED_INT_ARRAY_TYPE)
|
| +TYPE_CHECKER(ExternalFloatArray, EXTERNAL_FLOAT_ARRAY_TYPE)
|
| +TYPE_CHECKER(ExternalDoubleArray, EXTERNAL_DOUBLE_ARRAY_TYPE)
|
|
|
|
|
| bool MaybeObject::IsFailure() {
|
| @@ -549,42 +495,14 @@ bool Object::IsJSProxy() {
|
| }
|
|
|
|
|
| -bool Object::IsJSFunctionProxy() {
|
| - return Object::IsHeapObject() &&
|
| - HeapObject::cast(this)->map()->instance_type() == JS_FUNCTION_PROXY_TYPE;
|
| -}
|
| -
|
| -
|
| -bool Object::IsJSWeakMap() {
|
| - return Object::IsJSObject() &&
|
| - HeapObject::cast(this)->map()->instance_type() == JS_WEAK_MAP_TYPE;
|
| -}
|
| -
|
| -
|
| -bool Object::IsJSContextExtensionObject() {
|
| - return IsHeapObject()
|
| - && (HeapObject::cast(this)->map()->instance_type() ==
|
| - JS_CONTEXT_EXTENSION_OBJECT_TYPE);
|
| -}
|
| -
|
| -
|
| -bool Object::IsMap() {
|
| - return Object::IsHeapObject()
|
| - && HeapObject::cast(this)->map()->instance_type() == MAP_TYPE;
|
| -}
|
| -
|
| -
|
| -bool Object::IsFixedArray() {
|
| - return Object::IsHeapObject()
|
| - && HeapObject::cast(this)->map()->instance_type() == FIXED_ARRAY_TYPE;
|
| -}
|
| -
|
| -
|
| -bool Object::IsFixedDoubleArray() {
|
| - return Object::IsHeapObject()
|
| - && HeapObject::cast(this)->map()->instance_type() ==
|
| - FIXED_DOUBLE_ARRAY_TYPE;
|
| -}
|
| +TYPE_CHECKER(JSFunctionProxy, JS_FUNCTION_PROXY_TYPE)
|
| +TYPE_CHECKER(JSSet, JS_SET_TYPE)
|
| +TYPE_CHECKER(JSMap, JS_MAP_TYPE)
|
| +TYPE_CHECKER(JSWeakMap, JS_WEAK_MAP_TYPE)
|
| +TYPE_CHECKER(JSContextExtensionObject, JS_CONTEXT_EXTENSION_OBJECT_TYPE)
|
| +TYPE_CHECKER(Map, MAP_TYPE)
|
| +TYPE_CHECKER(FixedArray, FIXED_ARRAY_TYPE)
|
| +TYPE_CHECKER(FixedDoubleArray, FIXED_DOUBLE_ARRAY_TYPE)
|
|
|
|
|
| bool Object::IsDescriptorArray() {
|
| @@ -647,10 +565,7 @@ bool Object::IsSerializedScopeInfo() {
|
| }
|
|
|
|
|
| -bool Object::IsJSFunction() {
|
| - return Object::IsHeapObject()
|
| - && HeapObject::cast(this)->map()->instance_type() == JS_FUNCTION_TYPE;
|
| -}
|
| +TYPE_CHECKER(JSFunction, JS_FUNCTION_TYPE)
|
|
|
|
|
| template <> inline bool Is<JSFunction>(Object* obj) {
|
| @@ -658,43 +573,12 @@ template <> inline bool Is<JSFunction>(Object* obj) {
|
| }
|
|
|
|
|
| -bool Object::IsCode() {
|
| - return Object::IsHeapObject()
|
| - && HeapObject::cast(this)->map()->instance_type() == CODE_TYPE;
|
| -}
|
| -
|
| -
|
| -bool Object::IsOddball() {
|
| - return Object::IsHeapObject()
|
| - && HeapObject::cast(this)->map()->instance_type() == ODDBALL_TYPE;
|
| -}
|
| -
|
| -
|
| -bool Object::IsJSGlobalPropertyCell() {
|
| - return Object::IsHeapObject()
|
| - && HeapObject::cast(this)->map()->instance_type()
|
| - == JS_GLOBAL_PROPERTY_CELL_TYPE;
|
| -}
|
| -
|
| -
|
| -bool Object::IsSharedFunctionInfo() {
|
| - return Object::IsHeapObject() &&
|
| - (HeapObject::cast(this)->map()->instance_type() ==
|
| - SHARED_FUNCTION_INFO_TYPE);
|
| -}
|
| -
|
| -
|
| -bool Object::IsJSValue() {
|
| - return Object::IsHeapObject()
|
| - && HeapObject::cast(this)->map()->instance_type() == JS_VALUE_TYPE;
|
| -}
|
| -
|
| -
|
| -bool Object::IsJSMessageObject() {
|
| - return Object::IsHeapObject()
|
| - && (HeapObject::cast(this)->map()->instance_type() ==
|
| - JS_MESSAGE_OBJECT_TYPE);
|
| -}
|
| +TYPE_CHECKER(Code, CODE_TYPE)
|
| +TYPE_CHECKER(Oddball, ODDBALL_TYPE)
|
| +TYPE_CHECKER(JSGlobalPropertyCell, JS_GLOBAL_PROPERTY_CELL_TYPE)
|
| +TYPE_CHECKER(SharedFunctionInfo, SHARED_FUNCTION_INFO_TYPE)
|
| +TYPE_CHECKER(JSValue, JS_VALUE_TYPE)
|
| +TYPE_CHECKER(JSMessageObject, JS_MESSAGE_OBJECT_TYPE)
|
|
|
|
|
| bool Object::IsStringWrapper() {
|
| @@ -702,10 +586,7 @@ bool Object::IsStringWrapper() {
|
| }
|
|
|
|
|
| -bool Object::IsForeign() {
|
| - return Object::IsHeapObject()
|
| - && HeapObject::cast(this)->map()->instance_type() == FOREIGN_TYPE;
|
| -}
|
| +TYPE_CHECKER(Foreign, FOREIGN_TYPE)
|
|
|
|
|
| bool Object::IsBoolean() {
|
| @@ -714,16 +595,8 @@ bool Object::IsBoolean() {
|
| }
|
|
|
|
|
| -bool Object::IsJSArray() {
|
| - return Object::IsHeapObject()
|
| - && HeapObject::cast(this)->map()->instance_type() == JS_ARRAY_TYPE;
|
| -}
|
| -
|
| -
|
| -bool Object::IsJSRegExp() {
|
| - return Object::IsHeapObject()
|
| - && HeapObject::cast(this)->map()->instance_type() == JS_REGEXP_TYPE;
|
| -}
|
| +TYPE_CHECKER(JSArray, JS_ARRAY_TYPE)
|
| +TYPE_CHECKER(JSRegExp, JS_REGEXP_TYPE)
|
|
|
|
|
| template <> inline bool Is<JSArray>(Object* obj) {
|
| @@ -821,18 +694,8 @@ bool Object::IsGlobalObject() {
|
| }
|
|
|
|
|
| -bool Object::IsJSGlobalObject() {
|
| - return IsHeapObject() &&
|
| - (HeapObject::cast(this)->map()->instance_type() ==
|
| - JS_GLOBAL_OBJECT_TYPE);
|
| -}
|
| -
|
| -
|
| -bool Object::IsJSBuiltinsObject() {
|
| - return IsHeapObject() &&
|
| - (HeapObject::cast(this)->map()->instance_type() ==
|
| - JS_BUILTINS_OBJECT_TYPE);
|
| -}
|
| +TYPE_CHECKER(JSGlobalObject, JS_GLOBAL_OBJECT_TYPE)
|
| +TYPE_CHECKER(JSBuiltinsObject, JS_BUILTINS_OBJECT_TYPE)
|
|
|
|
|
| bool Object::IsUndetectableObject() {
|
| @@ -2145,6 +2008,8 @@ CAST_ACCESSOR(JSArray)
|
| CAST_ACCESSOR(JSRegExp)
|
| CAST_ACCESSOR(JSProxy)
|
| CAST_ACCESSOR(JSFunctionProxy)
|
| +CAST_ACCESSOR(JSSet)
|
| +CAST_ACCESSOR(JSMap)
|
| CAST_ACCESSOR(JSWeakMap)
|
| CAST_ACCESSOR(Foreign)
|
| CAST_ACCESSOR(ByteArray)
|
| @@ -3917,6 +3782,8 @@ void JSProxy::InitializeBody(int object_size, Object* value) {
|
| }
|
|
|
|
|
| +ACCESSORS(JSSet, table, Object, kTableOffset)
|
| +ACCESSORS(JSMap, table, Object, kTableOffset)
|
| ACCESSORS(JSWeakMap, table, Object, kTableOffset)
|
| ACCESSORS(JSWeakMap, next, Object, kNextOffset)
|
|
|
| @@ -4505,27 +4372,31 @@ MaybeObject* StringDictionaryShape::AsObject(String* key) {
|
| }
|
|
|
|
|
| -bool ObjectHashTableShape::IsMatch(JSReceiver* key, Object* other) {
|
| - return key == JSReceiver::cast(other);
|
| +template <int entrysize>
|
| +bool ObjectHashTableShape<entrysize>::IsMatch(Object* key, Object* other) {
|
| + return key->SameValue(other);
|
| }
|
|
|
|
|
| -uint32_t ObjectHashTableShape::Hash(JSReceiver* key) {
|
| - MaybeObject* maybe_hash = key->GetIdentityHash(OMIT_CREATION);
|
| - ASSERT(!maybe_hash->IsFailure());
|
| - return Smi::cast(maybe_hash->ToObjectUnchecked())->value();
|
| +template <int entrysize>
|
| +uint32_t ObjectHashTableShape<entrysize>::Hash(Object* key) {
|
| + ASSERT(!key->IsUndefined() && !key->IsNull());
|
| + MaybeObject* maybe_hash = key->GetHash(OMIT_CREATION);
|
| + return Smi::cast(maybe_hash->ToObjectChecked())->value();
|
| }
|
|
|
|
|
| -uint32_t ObjectHashTableShape::HashForObject(JSReceiver* key, Object* other) {
|
| - MaybeObject* maybe_hash =
|
| - JSReceiver::cast(other)->GetIdentityHash(OMIT_CREATION);
|
| - ASSERT(!maybe_hash->IsFailure());
|
| - return Smi::cast(maybe_hash->ToObjectUnchecked())->value();
|
| +template <int entrysize>
|
| +uint32_t ObjectHashTableShape<entrysize>::HashForObject(Object* key,
|
| + Object* other) {
|
| + ASSERT(!other->IsUndefined() && !other->IsNull());
|
| + MaybeObject* maybe_hash = other->GetHash(OMIT_CREATION);
|
| + return Smi::cast(maybe_hash->ToObjectChecked())->value();
|
| }
|
|
|
|
|
| -MaybeObject* ObjectHashTableShape::AsObject(JSReceiver* key) {
|
| +template <int entrysize>
|
| +MaybeObject* ObjectHashTableShape<entrysize>::AsObject(Object* key) {
|
| return key;
|
| }
|
|
|
|
|