if [llength [info commands p7proc]] { set Compiling true } else { set Compiling false source testing.tcl } if $Compiling { # methods before p7class defs p7proc newA { (B)value } { new (A)z ; set z(p) $value ; set z } p7proc newB { (A)value } { new (B)z ; set z(p) $value ; set z } p7proc newX { (X)value } { new (X)z ; set z(p) $value ; set z } # circular referencing p7class A { (B)p } p7class B { (A)p } # self referencing p7class X { (X)p } } else { set a [newA ""] set b [newB $a] set aa [newA $b] set x [newX ""] set xx [newX $x] Okay }