<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    Le 29/08/2011 16:43, Tom Van Cutsem a écrit :
    <blockquote
cite="mid:CAKDfNj-L3hbJ+Ej+EGOtC2Dy0sLLHuR9YD=NWY0Jhx=L0bVrvw@mail.gmail.com"
      type="cite">(changed subject to fork off discussion on function
      proxies)<br>
      <br>
      <div class="gmail_quote">2011/8/29 Allen Wirfs-Brock <span
          dir="ltr"><<a moz-do-not-send="true"
            href="mailto:allen@wirfs-brock.com" target="_blank">allen@wirfs-brock.com</a>></span><br>
        <blockquote class="gmail_quote" style="margin:0 0 0
          .8ex;border-left:1px #ccc solid;padding-left:1ex">
          <div>On Aug 27, 2011, at 6:12 AM, Andreas Rossberg wrote:<br>
             > True, and actually, there are more issues with length
            & function<br>
            > proxies. I don't have my notes with me right now, but
            for example, it<br>
            > is not clear at all what length Function.prototype.bind
            should set<br>
            > when called on a function proxy. 0? 1? Should it try to
            get the length<br>
            > property from the proxy and subtract N? What if length
            is not defined<br>
            > on the proxy, or not a (natural) number?<br>
            <br>
          </div>
          The ES5.1 spec.  defines how how bind determines the length
          for the function it creates based upon the length property of
          the target function.  I would expect the same rules would
          apply when the target is a function proxy.</blockquote>
        <div><br>
        </div>
        <div>I see two options here:</div>
        <div>a) either query the function proxy for its "length"
          property via its "get" trap, and convert the result using
          ToInteger, introducing a new error case if the conversion
          fails.</div>
        <div>b) or determine "length" based on the function proxy's call
          trap (which is presumably a non-proxy function. If it is a
          function proxy itself, recurse)</div>
        <div><br>
        </div>
        <div>The spec currently uses the wording: "Let L be the length
          property of Target ..." (ES5.1 section 15.3.4.5)</div>
        <div>If that is not equivalent to "Let L be the result of
          calling the [[Get]] internal method of Target with argument
          "length"", then option b) seems better.</div>
      </div>
    </blockquote>
    There is no mention of function proxy lengths in
    harmony:proxies_semantics [1] nor in harmony:proxies and i'd like to
    discuss this.<br>
    -----<br>
    var f = Proxy.createFunction(functionHandler, function(){},
    function(){})<br>
    var l = f.length; // ?<br>
    -----<br>
    Currently, nothing is really said about how is handled f.length,
    f.prototype and such. So, it seems to be left to the proxy author.<br>
    In order to facilitate the author work, it could be possible to have
    an ES5.1-13.2-like function proxy constructor especially when it
    comes to steps 15, 17, 18 (i'm in doubt with steps 5 and 19).<br>
    Step 15 would be a way for the engine to communicate with the
    handler to pass the [[Call]].length value. In order to initially set
    the length value, i think it would make sense to take
    [[Call]].length too (what if [[Call]].length !==
    [[Construct]].length?). Also, it would facilitate the way the
    handler has access to [[Call]].length when writing
    functionHandler.get and functionHandler.get{Own}PropertyDescriptor<br>
    It could be left to the programmer the initiative to refuse the
    addition of the length property (if it's necessary to emulate an
    host object) (by returning false at the end of the defineProperty
    trap iirc)<br>
    <br>
    This would facilitate the author work when it comes to creating
    functions that look like functions without having to always include
    some initialization code for .length, .prototype and such. <br>
    It will still be possible to opt-out of .length or .prototype if the
    author doesn't<br>
    <br>
    David<br>
    <br>
    [1] <a class="moz-txt-link-freetext" href="http://wiki.ecmascript.org/doku.php?id=harmony:proxies_semantics">http://wiki.ecmascript.org/doku.php?id=harmony:proxies_semantics</a><br>
    [2] <a class="moz-txt-link-freetext" href="http://wiki.ecmascript.org/doku.php?id=strawman:fixed_properties">http://wiki.ecmascript.org/doku.php?id=strawman:fixed_properties</a><br>
  </body>
</html>