[Laszlo-dev] Serious rot in hand-coded dependency functions
P T Withington
ptw at pobox.com
Wed Feb 20 05:01:56 PST 2008
I'm looking around at the hand-coded dependency functions and they all
seem to think that they are going to be called with parameters: `who`,
`self`, and the parameters of the method they are the dependency
function for. But for centuries, the callers of `applyConstraint`
have been invoking dependency functions with no parameters (other than
the implicit `this` parameter, which is the LzNode whose attribute is
being constrained). E.g.:
> /**
> * Returns the value for the give attribute
> * @param String name: The name of the attribute whose value to
> return
> * @return String: The value for the given attribute
> */
> function getAttr (name){
> if (this.attributes) return this.attributes[ name ];
> }
>
> /**
> * @access private
> */
> prototype.getAttr.dependencies = function (who , self){
> return [ self, 'attributes' ];
> }
It's pretty clear that getAttr.dependencies should be returning
`[this, 'attributes']`. There are more:
> /** @access private */
> xpathQuery.dependencies = function ( who , self , p ){
> if (this.parsePath) {
> var pp = this.parsePath( p );
> return [ pp.hasDotDot ?
> self.context.getContext().ownerDocument : self ,
> "DocumentChange" ];
> } else {
> return [ self , "DocumentChange" ];
> }
> }
This is clearly never going to work, since `p` is never going to be
passed.
---
Seems to me that the contract of a dependency function changed a while
back, and no one ever got around to updating all these hand-made
ones. A lot of them still have the vestigial `who, self` parameters,
but their bodies have been re-written to refer to `this`. Others have
a comment saying they need to be re-written. Still others are just
plain broken.
Anyone know what is going on here? I plan to file a bug to get these
either fixed or removed.
More information about the Laszlo-dev
mailing list