<html>
    <head>
      <base href="https://bugs.webkit.org/" />
    </head>
    <body>
      <p>
        <div>
            <b><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - [test262] Fixing mapped arguments object property test case"
   href="https://bugs.webkit.org/show_bug.cgi?id=159398#c28">Comment # 28</a>
              on <a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - [test262] Fixing mapped arguments object property test case"
   href="https://bugs.webkit.org/show_bug.cgi?id=159398">bug 159398</a>
              from <span class="vcard"><a class="email" href="mailto:ticaiolima&#64;gmail.com" title="Caio Lima &lt;ticaiolima&#64;gmail.com&gt;"> <span class="fn">Caio Lima</span></a>
</span></b>
        <pre>(In reply to <a href="show_bug.cgi?id=159398#c27">comment #27</a>)
<span class="quote">&gt; Comment on <span class=""><a href="attachment.cgi?id=283766&amp;action=diff" name="attach_283766" title="Patch">attachment 283766</a> <a href="attachment.cgi?id=283766&amp;action=edit" title="Patch">[details]</a></span>
&gt; Patch
&gt; 
&gt; View in context:
&gt; <a href="https://bugs.webkit.org/attachment.cgi?id=283766&amp;action=review">https://bugs.webkit.org/attachment.cgi?id=283766&amp;action=review</a>
&gt; 
&gt; I think I understand the logic here now: It used to be that a property
&gt; either aliased *or* lived in JSObject property storage with attributes.
&gt; You're adding a new feature that allows a property to alias *and* live in
&gt; JSObject property storage with attributes. In this state, somewhat
&gt; confusingly, the value stored in JSObject property storage can be bogus
&gt; because it is not observed. You should explain this in your ChangeLog.</span >

Yes. My change is using the attributes just to check the attribute is DontDelete in deleteProperty*. One alternative is store configurable attribute in an auxiliary structure (such as m_overrides), however, IMHO, it doesn't look as intuitive as checking property attributes.

<span class="quote">&gt; I think you missed a case where the new property descriptor is not an
&gt; accessor, is writable, and is DontDelete. In that case, your code will
&gt; return early without setting the DontDelete attribute. Is that right?</span >

You are right. Fixing this case.

<span class="quote">&gt; Can you simplify the logic and duplicated code in
&gt; GenericArguments&lt;Type&gt;::defineOwnProperty?</span >

Yes. I agree that it can be better implemented.

<span class="quote">&gt; The relevant cases inside canAccessIndexQuickly, as I understand them, are:
&gt; 
&gt; (1) If the property is not an accessor and has either no attributes or only
&gt; the writable:true attribute, set the value and return.
&gt; 
&gt; Otherwise:
&gt; 
&gt; (2) getIndexQuickly and putDirectMayBeIndex.
&gt; 
&gt; (3) If the property has any attributes other than configurable:true or
&gt; configurable:false, overrideArgument.
&gt; 
&gt; (4) Fall through to the standard call to defineOwnProperty.</span >
&gt;
<span class="quote">&gt; &gt; Source/JavaScriptCore/runtime/GenericArgumentsInlines.h:158
&gt; &gt; +    PropertySlot slot(thisObject, PropertySlot::InternalMethodType::GetOwnProperty);
&gt; &gt; +    if (Base::getOwnPropertySlot(thisObject, exec, ident, slot)) {
&gt; &gt; +        if (slot.attributes() &amp; DontDelete)
&gt; &gt; +            return false;
&gt; &gt; +    }
&gt; 
&gt; Let's make this a helper function:
&gt; GenericArguments&lt;T&gt;::canDeleteProperty(PropertyName).
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/GenericArgumentsInlines.h:179
&gt; &gt; +    PropertySlot slot(thisObject, PropertySlot::InternalMethodType::GetOwnProperty);
&gt; &gt; +    if (Base::getOwnPropertySlotByIndex(thisObject, exec, index, slot)) {
&gt; &gt; +        if (slot.attributes() &amp; DontDelete)
&gt; &gt; +            return false;
&gt; &gt; +    }
&gt; 
&gt; Ditto.</span ></pre>
        </div>
      </p>
      <hr>
      <span>You are receiving this mail because:</span>
      
      <ul>
          <li>You are the assignee for the bug.</li>
      </ul>
    </body>
</html>