Posted to tcl by evilotto at Fri Aug 24 22:51:07 GMT 2018view pretty
namespace eval ::ref { variable refs {} variable cnt 0 } proc ref {value} { set rv ::ref::<refs_[incr ::ref::cnt]> dict set ::ref::refs $rv $value return $rv } proc getref {rv} { dict get $::ref::refs $rv } proc setref {rv value} { dict set ::ref::refs $rv $value } proc collect {} { set arefs $::ref::refs foreach v [info globals] { if [array exists ::$v] continue set val [set ::$v] if {[dict exists $arefs $val]} { dict unset arefs $val } } set count 0 foreach k [dict keys $arefs] { puts "no reference to $k" dict unset ::ref::refs $k incr count } puts "collected $count" }