[Proxies] Refactoring prototype climbing in the spec
allen at wirfs-brock.com
Wed Nov 9 09:08:08 PST 2011
On Nov 9, 2011, at 3:17 AM, Tom Van Cutsem wrote:
> 2011/11/8 Allen Wirfs-Brock <allen at wirfs-brock.com>
> I don't think that [[GetP]] and [[PutP]] need to be "internal methods"
> In spec'ing this I think I would make them be "abstract operations". Internal methods are extensions points that can be over-ridden on a per object basis. That is what [[Get]] and [[Put]] provides. GetP and SetP define fixed operations.
> I proposed [[GetP]] and [[SetP]] as internal methods because Proxies would "inherit" the built-in behavior for [[Get]] and [[Put]], but "override" the [[GetP]] and [[SetP]] operations. If [[GetP]] and [[SetP]] become abstract operations, won't they need to explicitly dispatch? Proxies could override [[Get]] and [[Put]], but that would require them to duplicate the Object [[Get]] and [[Put]] code.
[[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]]
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the es-discuss