View · Search · Index
No registered users in community xowiki
in last 10 minutes

[Xotcl] Help with Filters. Resubmission.

From: Sheik Yussuff <sheik_at_carib-link.net>
Date: Sat, 15 Dec 2001 11:28:35 -0400

Below is nonsensical sample code to illustrate a problem I
am having with filters. On invocation of:
   a mb (see code section below)
1. Object a is sent the message mb(not an instproc) of A
2. Filter af of object a intercepts and
   dispatches message mbb to object b
3. Filter bf of object b intercepts and
   redispatches message maa to object a
   This time the filter af does not intercept message maa!!
   The message maa is sent directly to object a with
   the resulting error: object a unable to dispatch
   method maa.

Can anyone assist me in explaining what is happening here?
------------------------------------------------------------
#Code: Win 98 version 0.91; got same problem with ver 0.85 3 months ago.

Class A -parameter {delegate}

A instproc af args {
  set method [self calledproc]
  if {[[self] exists delegate]} {
    set del [[self] set delegate]
    if {$method == "maa"} {
      return [eval $del mbb]
    }
    if {$method != "ma"} {
      return [eval $del $method $args]
    }
  }
  next
}

A instfilter {af}

A instproc ma args {
  puts "method ma of A"
}


Class B
B instproc bf args {
  set sender [self callingobject]
  set method [self calledproc]
  puts "method is: $method"
  if {$method == "mb"} {
    
    return [eval $sender maa]
  }
  next
}

B instfilter bf

B instproc mb args {
  puts "method mb of B"
}

B instproc mbb args {
  puts "method mbb of B"
}

B b
A a
a delegate b
#a ma ; #works ok
a mb