an *uplevel-proc* is an *proc* which evaluate the entire content *uplevel* → example:
proc Format_Return_Error_Check {hdl err} { uplevel "Format_Error_Check $hdl $err ; set retM void" }
This simulate a *CPP*-Macro like behavior in *TCL*.
The easy solution to just lice a normal *proc*-body like:
proc Format_Return_Error_Check {hdl err} { upvar retM retM Format_Error_Check $hdl $err set retM void }
is not really a solution because the "upvar" in a sub-*proc* like *Format_Error_Check* is broken because *Format_Return_Error_Check* return an extra call-frame.
solution:
It should be possible to create a *proc* witch *not* add an extra *level* to the call-frame, a good name would be *macro* :
macro Format_Return_Error_Check {hdl err} { Format_Error_Check $hdl $err set retM void }
The following features should be present:
1) A *macro* argument variable (hdl err) is *only* visible in the macro-body 2) A other variable (retM) is from the calling-call-frame 3) A *macro* deos NOT add a call-frame → an *upvar* in *Format_Error_Check* should call he calling-call-frame and not the macro-body-frame