<html>
    <head>
      <base href="https://bugs.webkit.org/" />
    </head>
    <body>
      <p>
        <div>
            <b><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - LLInt should support other types of prototype GetById caching."
   href="https://bugs.webkit.org/show_bug.cgi?id=158083#c5">Comment # 5</a>
              on <a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - LLInt should support other types of prototype GetById caching."
   href="https://bugs.webkit.org/show_bug.cgi?id=158083">bug 158083</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=158083#c3">comment #3</a>)
<span class="quote">&gt; (In reply to <a href="show_bug.cgi?id=158083#c1">comment #1</a>)
&gt; &gt; Hey Keith, I am interested in work in this bug if it is possible
&gt; &gt; 
&gt; &gt; Cold you clarify some points to me?
&gt; &gt; 
&gt; &gt; 1. What are prototype misses?
&gt; &gt; 
&gt; &gt; 2. When you think in cache accessors, you mean getters and setters?
&gt; &gt; 
&gt; &gt; 3. Also, for customs
&gt; &gt; 
&gt; &gt; It could be a big help if you post some JavaScript code as example.
&gt; &gt; 
&gt; &gt; I am trying to debug the case for accessors and I noticed that the getter is
&gt; &gt; emitted as get_by_id op and I suspect it is already being cached (I didn't
&gt; &gt; check it).
&gt; 
&gt; Hi Caio,
&gt; 
&gt; It would be great if you fixed this feature and I would be happy to help.
&gt; Feel free to message me on irc, my nick is keith_miller, if you have any
&gt; other questions.
&gt; 
&gt; 1) prototype miss was the wrong terminology. I should have said that we
&gt; should cache unset properties. Meaning, `let x = foo.bar` where `&quot;bar&quot; in
&gt; foo === false`. I actually already handled this case in
&gt; <a href="http://trac.webkit.org/changeset/201456">http://trac.webkit.org/changeset/201456</a>.
&gt; 
&gt; 2) Yep, that's right. In JavaScriptCore we use the word Accessor to mean a
&gt; property with a getter and/or a setter. 
&gt; 
&gt; For example, if you did the following: 
&gt; 
&gt; foo = {};
&gt; Object.defineOwnProperty(Object.prototype, &quot;bar&quot;, { get: () =&gt; { return 1; }
&gt; });
&gt; print(foo.bar);
&gt; 
&gt; The bytecodes will look something like:
&gt; 
&gt; [   9] resolve_scope     loc10, loc3, print(&#64;id0), &lt;GlobalProperty&gt;, 1,
&gt; 0x113de7900
&gt; [  16] get_from_scope    loc6, loc10, print(&#64;id0),
&gt; 2048&lt;ThrowIfNotFound|GlobalProperty|NotInitialization&gt;, 122    predicting
&gt; None
&gt; [  24] resolve_scope     loc11, loc3, foo(&#64;id1), &lt;GlobalProperty&gt;, 1,
&gt; 0x113de7900
&gt; [  31] get_from_scope    loc12, loc11, foo(&#64;id1),
&gt; 2048&lt;ThrowIfNotFound|GlobalProperty|NotInitialization&gt;, 191    predicting
&gt; None
&gt; [  39] get_by_id         loc9, loc12, bar(&#64;id2)    predicting None
&gt; [  48] call              loc5, loc6, 2, 16 status(Could Take Slow Path)   
&gt; Original; predicting None
&gt; 
&gt; That get_by_id will attempt to lookup the property on foo by calling foo's
&gt; getOwnPropertySlot function, which will set the passed PropertySlot&amp; to
&gt; Object.prototype's &quot;bar&quot; GetterSetter object. In this case, the PropertySlot
&gt; will say that the value is an GetterSetter and we won't cache it.
&gt; 
&gt; 3) Customs are mostly used as a performance optimization for DOM Accessors.
&gt; Basically, instead of allocating a JSFunction object for all accessor
&gt; properties in the DOM we use a function pointer instead. You can see the
&gt; typedef, GetValueFunc, in PropertySlot.h. Customs are also used in a small
&gt; number of other places for special properties that are values but change
&gt; might change, although that is quite rare.
&gt; 
&gt; I would recommend for a first pass that you implement a new opcode, I guess
&gt; called op_get_by_id_proto_accessor, that just calls to a slow path. In the
&gt; slow path it can load the GetterSetter object and call the getter returning
&gt; the result. If you are feeling very ambitious, you could inline the code for
&gt; the call in the interpreter assembly. Let me know if you plan on trying to
&gt; inline the call since you will need to know the JavaScriptCore calling
&gt; convention to implement it.</span >

Thanks for the clarification Keith.

I am sending a prototype of what you described, but I definitely want to learn how can I inline a function call =).</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>