<br><br><div class="gmail_quote">2010/10/20 Dmitry A. Soshnikov <span dir="ltr">&lt;<a href="mailto:dmitry.soshnikov@gmail.com">dmitry.soshnikov@gmail.com</a>&gt;</span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">


  
    
    
  
  <div bgcolor="#ffffff" text="#000000">
    (I answer both -- Brendan&#39;s and Mark&#39;s letters for convenience in
    here).<div class="im"><br>
    <br>
    On 20.10.2010 21:06, Brendan Eich wrote:
    <blockquote type="cite">
      <div>
        <div>On Oct 20, 2010, at 9:16 AM, Mark S. Miller wrote:</div>
        <br>
        <blockquote type="cite">On Wed, Oct 20, 2010 at 7:10 AM, Dmitry
          A. Soshnikov <span dir="ltr">&lt;<a href="mailto:dmitry.soshnikov@gmail.com" target="_blank">dmitry.soshnikov@gmail.com</a>&gt;</span>
          wrote:<br>
          <div class="gmail_quote">
            <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204, 204, 204);padding-left:1ex">
              <div bgcolor="#ffffff" text="#000000"> OK, I&#39;d like
                nevertheless to continue the discussion with possible
                decisions.<br>
                <br>
                Here is a description of how [[Get]] method can work of
                a trapping proxy object (I took the basis from the proxy
                semantics page --
                <a href="http://wiki.ecmascript.org/doku.php?id=harmony:proxies_semantics#semantics_of_proxies" target="_blank">http://wiki.ecmascript.org/doku.php?id=harmony:proxies_semantics#semantics_of_proxies</a>):<br>

                <br>
                [[Get]] (P)<br>
                <br>
                When the [[Get]] internal method of a trapping proxy O
                is called with property name P, the following steps are
                taken:<br>
                <br>
                   1. Let handler be the value of the [[Handler]]
                internal property of O.<br>
                   2. Let get be the result of calling the [[Get]]
                internal method of handler with argument “get”.<br>
                   3. If get is undefined, return the result of
                performing the default behavior, by consulting handler’s
                “getPropertyDescriptor” trap.<br>
                   4. If IsCallable(get) is false, throw a TypeError
                exception.<br>
                   5. Let getResult be the result of calling the
                [[Call]] internal method of get providing handler as the
                this value, O as the first argument and P as the second
                argument.<br>
                   6. if getResult is undefined and [[HasProperty]](P)</div>
            </blockquote>
          </div>
        </blockquote>
        <div><br>
        </div>
        [[HasProperty]] takes O as its receiver (this) parameter, so
        doesn&#39;t this break double-lifting? (<a href="http://wiki.ecmascript.org/doku.php?id=harmony:proxies#a_simple_membrane" target="_blank">http://wiki.ecmascript.org/doku.php?id=harmony:proxies#a_simple_membrane</a>)</div>

      <div>
        <div><br>
        </div>
      </div>
      <div><br>
      </div>
    </blockquote>
    <br></div>
    Hm.. Actually, I don&#39;t completely understand what is &quot;double
    lifting&quot; (a proxied proxy?) as well as the whole membrane example
    (to many wrap-wrap-wrap and a every time a creating of a new
    function), but I think I should carefully read Mark&#39;s
    &quot;markm-thesis.pdf&quot; paper. Though, your example from slides is
    simpler than on the strawman page (but there too -- wrap calls
    wrapFunction, which in turn calls wrap again -- not so easy to get
    from the first glance, but I&#39;ll look closer).<br>
    <br>
    However, if someone can clarify it (the main and basic idea in &quot;two
    words&quot; and regarding &quot;double lifting&quot; too) I&#39;ll be very thankful,
    &#39;cause it&#39;s interesting.<br>
    <br>
    Anyway, is there an alternative how [[HasProperty]] can work
    correctly? I just though, that it&#39;s called by the &quot;has&quot; hook of a
    handler, which in turn can &quot;lie&quot; of course (i.e. return true when a
    property does not exist -- in such a case, noSuchMethod won&#39;t be
    called).</div></blockquote><div><br></div><div>I think Dmitry is right: calling [[HasProperty]] on a proxy object should trigger its &quot;has()&quot; trap in the normal way, which should work with double lifting.</div>
<div><br></div><div>In short, double lifting is a trick where the handler object of a proxy is itself a handler. See section 4.5 of the paper about proxies that MarkM and I presented at the Dynamic Languages Symposium last week (here&#39;s a link to the submitted, non-final, version: &lt;<a href="http://soft.vub.ac.be/~tvcutsem/proxies/assets/proxies.pdf">http://soft.vub.ac.be/~tvcutsem/proxies/assets/proxies.pdf</a>&gt;) In the paper, we use the term &quot;meta-level shifting&quot; instead of &quot;double lifting&quot;, but it&#39;s the same concept.</div>
<div><br></div><div>Cheers,</div><div>Tom</div></div><br>