On Oct 8, 2012, at 10:57 AM, Tom Van Cutsem wrote:
> 2012/10/8 Allen Wirfs-Brock <[email protected]>
>
> With the [[Enumerate]] trap parameters I was trying to minimize the number of
> essential internal methods. I don't see why we couldn't carry that forward
> to traps. A single [[GetPropertyKeys]] internal method/trap with
> includePrototype and onlyEnumerable arguments would seem to cover the all of
> the use cases of the enumerate, keys and getOwnPropertyNames traps. Why not
> just have that single trap?
>
> I prefer the current symmetry with the existing built-ins:
>
> Object.keys(proxy) // triggers handler.keys(target)
> Object.getOwnPropertyNames(proxy) // triggers
> handler.getOwnPropertyNames(target)
>
> It's just more learnable and consistent than routing these through a
> getPropertyKeys trap.
Then we should also have the enumerate trap.
>
> Also, in a previous attempt to merge operations into a single trap (freeze,
> seal, preventExtensions) we eventually circled back and left them separate,
> on the grounds that most of the time you'd end up having to dispatch based on
> the arguments to a dedicated operation anyway.
However, internal method have to be dispatched at a very low level of an
implementation. In some implementations there might be a runtime cost to
having a larger number of them. On the other hand, pushing dispatching into
the handler certainly has a cost. I could speculate that these are relatively
rare operations (compared to most other internal methods) and if having a
larger number of internal methods carried any intrinsic runtime performance
cost it would be better to place the cost on the actual use of the internal
methods/traps in question.
>
> I'm all for internal spec refactorings to avoid duplication, but I feel this
> particular refactoring is better left invisible to users.
I definitely want the internal methods and traps to be completely parallel. If
we take the path suggested above I will add the equivalent of [[keys]] and
[[getOwnPropertyNames]] as essential internal methods and get rid of the
parameters to [[Enumerate]].
If that is the consensus, it should probably be captured as a spec. bug report.
Allen
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss