<div class="gmail_quote">2012/8/22 David Bruant <span dir="ltr"><<a href="mailto:bruant.d@gmail.com" target="_blank">bruant.d@gmail.com</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Le 21/08/2012 17:41, Tom Van Cutsem a écrit :<div class="im">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
2) it reintroduces a subtle issue from the old design that had to do with fixing a proxy while it still has pending trap activations on the runtime stack: an unrevoked proxy may call one of its traps and be revoked by the time the trap returns.<br>

</blockquote></div>
As a complement to what you're saying, in this case, the proxy user revokes the proxy (intentionally or not) in the middle of a normal object operation (get/set/has/etc.). After this operation, the proxy is revoked. We can say "revoked internally" since it has not been does by an external proxy user, but a trap.</blockquote>
<div><br></div><div>Not necessarily: the trap, while executing, may call on some external code which then does the revocation, so there's no reason to call it "revoked internally" (i.e. the revocation may happen arbitrarily deep in the call stack, it may not occur lexically in the scope of the trap).</div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
For invariant enforcement to work correctly, the trap's result must be verified against the original target.<br>
</blockquote></div>
Or should it just throw, considering that no invariant holds for internally revoked proxy?<br>
Returning a last result while the proxy has been internally revoked might be considered as a leak.<br>
<br>[example snipped]<br>
<br>
I have no strong opinion as for what is best between doing a "last successful operation" or throwing for internally revoked proxies, I just wanted to share this option for the sake of completeness.</blockquote>
<div><br></div><div>The way proxies are currently specced (see <<a href="http://wiki.ecmascript.org/doku.php?id=harmony:proxies_spec#proxy_internal_methods">http://wiki.ecmascript.org/doku.php?id=harmony:proxies_spec#proxy_internal_methods</a>>), the [[Target]] of a proxy is always read into a local variable before calling the trap, and in the post-trap assertion checks, this local variable is then used. Thus, it doesn't matter whether the proxy was revoked in the mean time or not.</div>
<div><br></div><div>I don't see the harm in still allowing pending trap activations to return gracefully upon revocation.</div><div><br></div><div>Cheers,</div><div>Tom</div></div>