def evaluate(m)
      return self.owner.instance_eval(m) if self.owner != nil && self.owner.respond_to?(m)
      return self.instance_eval(m) if self.respond_to?(m)
      nil
    end
def evaluate(m)
      return self.owner.instance_eval(m) if self.owner != nil && self.owner.respond_to?(m)
      return self.instance_eval(m) if self.respond_to?(m)
      nil
    end
this is the associated object

 evaluate a method on the owner of this node (if present). If an owner is
 not present, then the method is evaluated on this object. In either case
 a check is made to ensure that the object will respond_to? the method call.
 If the owner exists but does not respond to the method, then the method is
 tried on this node object in similar fashion.
 !!! SHOULD THIS JUST OVERRIDE instance_eval ??
 @param [Method] m method to call
 @return [] the result of the method call, or nil if unable to evaluate