On Nov 10, 2011, at 1:36 AM, Tom Van Cutsem wrote:
> 2011/11/9 Allen Wirfs-Brock <[email protected]>
> [[Get]] seems to do nothing but redispatch to [[GetP]] so its definition
> could be replaced with the body of [[GetP]].
>
> [[Puit] does a redispatch to [[SetP]] followed by a "mode" based conditional
> throw depending upon the result of the [[SetP]]. I din't think the the
> throwing behavior needs (or even should) be over-ride able by a proxy (or
> even by an alternative internal implementation). I would factor the
> conditional throw code out of [[Put]] and make it the responsibility of the
> caller. In practice, this just means that I would define a new Abstraction
> Operation that is used in place of direct calls to [[Put]]. The abstraction
> operation wold essentially have the definition you provide for [[Put]] except
> that it would call [[Put]] instead of [[SetP]] and the definition of [[Put]]
> would be replaced with the body of [[SetP]]
>
> Agreed. So if I understood all of that correctly, we would have:
> - Abstract [[GetProperty]] and [[SetProperty]] operations (the methods I
> called [[GetP]] and [[SetP]])
Yes, current spec. conventions would just call these GetProperty and
SetProperty abstract operations.
> - Object.getProperty and Object.setProperty built-ins that call
> [[GetProperty]] and [[SetProperty]]
Also, to fully reify property manipulation I think we also need to factor
[[Delete]] in a similar manner and provide an Object.deleteProperty built-in
that calls the DeleteProperty abstraction operations.
I touch upon this in
http://wiki.ecmascript.org/doku.php?id=strawman:object_model_reformation#a_side_note_on_reflective_property_access
(note that this stawman is still under construction)
the basic reason is that just like with Get/Put a handler may want to invoke
the primitive behavior of Delete upon the target object without going through
the delete operator (which could retrigger a trap).
> - [[Get]] and [[Set]] methods on Objects that call [[GetProperty]] and
> [[SetProperty]]
> - [[Get]] and [[Set]] methods on Proxies that trigger "get" and "set" traps
Yes, although I prefer to think of [[Get]] and [[Set]] consistently for both
Proxy and "normal" objects. They are polymorphic "traps" that dispatch to a
handler that is determined by the nature of the object. For native objects
[[Get]] and [[Set]] dispatch to handlers that just call GetProperty or
SetProperty
> - An abstract operation [[Put]](O, P, V, Throw) that calls O.[[Set]](O,P,V)
> and performs the "strict mode" reject behavior.
Yes, call it Put.
Allen
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss