Bug 1372182 part 8 - Optimize AddTypePropertyId. r=evilpie

This commit is contained in:
Jan de Mooij 2017-06-16 17:42:23 +02:00
Родитель 733406cbad
Коммит 6dbbe103da
1 изменённых файлов: 15 добавлений и 8 удалений

Просмотреть файл

@ -405,11 +405,10 @@ PropertyHasBeenMarkedNonConstant(JSObject* obj, jsid id)
} }
MOZ_ALWAYS_INLINE bool MOZ_ALWAYS_INLINE bool
HasTypePropertyId(JSObject* obj, jsid id, TypeSet::Type type) HasTrackedPropertyType(JSObject* obj, jsid id, TypeSet::Type type)
{ {
id = IdToTypeId(id); MOZ_ASSERT(id == IdToTypeId(id));
if (!TrackPropertyTypes(obj, id)) MOZ_ASSERT(TrackPropertyTypes(obj, id));
return true;
if (HeapTypeSet* types = obj->group()->maybeGetProperty(id)) { if (HeapTypeSet* types = obj->group()->maybeGetProperty(id)) {
if (!types->hasType(type)) if (!types->hasType(type))
@ -423,6 +422,16 @@ HasTypePropertyId(JSObject* obj, jsid id, TypeSet::Type type)
return false; return false;
} }
MOZ_ALWAYS_INLINE bool
HasTypePropertyId(JSObject* obj, jsid id, TypeSet::Type type)
{
id = IdToTypeId(id);
if (!TrackPropertyTypes(obj, id))
return true;
return HasTrackedPropertyType(obj, id, type);
}
MOZ_ALWAYS_INLINE bool MOZ_ALWAYS_INLINE bool
HasTypePropertyId(JSObject* obj, jsid id, const Value& value) HasTypePropertyId(JSObject* obj, jsid id, const Value& value)
{ {
@ -437,16 +446,14 @@ MOZ_ALWAYS_INLINE void
AddTypePropertyId(JSContext* cx, JSObject* obj, jsid id, TypeSet::Type type) AddTypePropertyId(JSContext* cx, JSObject* obj, jsid id, TypeSet::Type type)
{ {
id = IdToTypeId(id); id = IdToTypeId(id);
if (TrackPropertyTypes(obj, id)) if (TrackPropertyTypes(obj, id) && !HasTrackedPropertyType(obj, id, type))
AddTypePropertyId(cx, obj->group(), obj, id, type); AddTypePropertyId(cx, obj->group(), obj, id, type);
} }
MOZ_ALWAYS_INLINE void MOZ_ALWAYS_INLINE void
AddTypePropertyId(JSContext* cx, JSObject* obj, jsid id, const Value& value) AddTypePropertyId(JSContext* cx, JSObject* obj, jsid id, const Value& value)
{ {
id = IdToTypeId(id); return AddTypePropertyId(cx, obj, id, TypeSet::GetValueType(value));
if (TrackPropertyTypes(obj, id))
AddTypePropertyId(cx, obj->group(), obj, id, value);
} }
inline void inline void