Posted to tcl by evilotto at Fri Aug 24 22:51:07 GMT 2018view raw
- 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"
- }