aboutsummaryrefslogtreecommitdiff
path: root/oo.tcl
diff options
context:
space:
mode:
authorSteve Bennett <steveb@workware.net.au>2011-09-26 15:01:36 +1000
committerSteve Bennett <steveb@workware.net.au>2011-09-26 15:01:36 +1000
commita36dd18cbc9c8b0483c2cefa49f5bbc2bd3b4e73 (patch)
tree5b9085e30c46b629eb3a2fd75c2143695bd63407 /oo.tcl
parent9664e24cd60105151a3e0e906b9687ed83fe088f (diff)
downloadjimtcl-a36dd18cbc9c8b0483c2cefa49f5bbc2bd3b4e73.zip
jimtcl-a36dd18cbc9c8b0483c2cefa49f5bbc2bd3b4e73.tar.gz
jimtcl-a36dd18cbc9c8b0483c2cefa49f5bbc2bd3b4e73.tar.bz2
Class vars should take precedence
...over baseclass vars. Signed-off-by: Steve Bennett <steveb@workware.net.au>
Diffstat (limited to 'oo.tcl')
-rw-r--r--oo.tcl6
1 files changed, 4 insertions, 2 deletions
diff --git a/oo.tcl b/oo.tcl
index 7d8233b..090b511 100644
--- a/oo.tcl
+++ b/oo.tcl
@@ -10,16 +10,18 @@
# The *last* baseclass can be accessed directly with [super]
# Later baseclasses take precedence if the same method exists in more than one
proc class {classname {baseclasses {}} classvars} {
+ set baseclassvars {}
foreach baseclass $baseclasses {
# Start by mapping all methods to the parent class
foreach method [$baseclass methods] { alias "$classname $method" "$baseclass $method" }
# Now import the base class classvars
- set classvars [dict merge $classvars [$baseclass classvars]]
+ set baseclassvars [dict merge $baseclassvars [$baseclass classvars]]
# The last baseclass will win here
proc "$classname baseclass" {} baseclass { return $baseclass }
}
- # Make sure that classvars is a dictionary
+ # Merge in the baseclass vars with lower precedence
+ set classvars [dict merge $baseclassvars $classvars]
set vars [lsort [dict keys $classvars]]
# This is the class dispatcher for $classname