Version 0 of Pointer clean-up!

Updated 1999-08-24 09:00:39

When you wrap up a load of C/C++ code and use it as a Tcl shared object extension, you often find yourself coding large, ungainly *TclC* procedures which make much use of pointers. I found it useful to write a defaultDestructor procedure to do a final cleanup of pointers created in procedure context:

 proc defaultDestructor { { level 1 } } {

      set msg "defaultDestructor:"

      set vnames [ uplevel $level info vars ]

      foreach vname $vnames {

         ;## dereference
         set vname [ uplevel $level set $vname ]

         if { [ llength $vname ] > 1 } { continue }

         switch -regexp -- $vname {
            {^_[0-9a-f]+_Frame_p$} {
                 set seqpt "destructFrame($vname):"
                 if { [ catch {
                    uplevel $level destructFrame $vname 
                    } err ] } {
                    lappend msg "$seqpt $err"
                    }
                               }
            {^_[0-9a-f]+_Element_p$} {
                 set seqpt "destructElement($vname):"
                 if { [ catch {
                    uplevel $level destructElement $vname 
                    } err ] } {
                    lappend msg "$seqpt $err" 
                    }

.

. more of the same elided...

.

            {^_[0-9a-f]+_FrameFile_p$} {
                set seqpt "closeFrameFile($vname):"
                if { [ catch {
                   uplevel $level closeFrameFile $vname 
                   } err ] } {
                   lappend msg "$seqpt $err" 
                   }

.

. even more elided!

.

                } ;## end of switch
           } ;## end of foreach
    if { [ llength $msg ] > 1 } {
       return -code error $msg
       }
 }

If it is not too much to ask, could you please supply a bit more context on what the purpose of this code fragment is? Sure, I can see what it is doing per se, but I have no feeling for why it should be doing this. I happen to believe the why of things is extremely important, since it is what determines the what of things... DKF