unsigned PropertyDescriptor::attributesOverridingCurrent(const PropertyDescriptor& current) const { unsigned currentAttributes = current.m_attributes; if (isDataDescriptor() && current.isAccessorDescriptor()) currentAttributes |= PropertyAttribute::ReadOnly; unsigned overrideMask = 0; if (writablePresent()) overrideMask |= PropertyAttribute::ReadOnly; if (enumerablePresent()) overrideMask |= PropertyAttribute::DontEnum; if (configurablePresent()) overrideMask |= PropertyAttribute::DontDelete; if (isAccessorDescriptor()) overrideMask |= PropertyAttribute::Accessor; return (m_attributes & overrideMask) | (currentAttributes & ~overrideMask & ~PropertyAttribute::CustomAccessor); }
bool PropertyDescriptor::isGenericDescriptor() const { return !isAccessorDescriptor() && !isDataDescriptor(); }