unsigned PropertyDescriptor::attributesOverridingCurrent(const PropertyDescriptor& current) const { unsigned currentAttributes = current.m_attributes; unsigned overrideMask = 0; if (writablePresent()) overrideMask |= ReadOnly; if (enumerablePresent()) overrideMask |= DontEnum; if (configurablePresent()) overrideMask |= DontDelete; if (isAccessorDescriptor()) overrideMask |= Accessor; return (m_attributes & overrideMask) | (currentAttributes & ~overrideMask); }
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); }